Browsed by
分类:英文

《microservice & serverless》的一点感想

《microservice & serverless》的一点感想

閱讀本文約花費: 6 (分鐘)超哥是来自Amazon的顶级的架构师,经历了Amazon整个向微服务架构迁移的过程,以及向serverless的演化过程,有着极其丰富的经验,年过40,一直站在技术的最前沿,始终保持对技术的执着追求和热情,是名副其实的技术大牛,能与之一起工作,荣幸之至!今天超哥给我们分享的主题《microservice & serverless》,是超哥实际工作经验的一些分享,也为公司架构的演化提供了新的思路和指导。 microservice(微服务)这个可能是这些年最火的一种架构设计了,频繁地出现在各种技术大会上,各大互联网巨头纷纷向这种架构演化,很多小的互联网公司也往这些概念上去靠,大有一种不做微服务就要落伍的趋势。事实上,很多对于微服务的理解比较粗浅,盲目的微服务化甚至会带来更多的负面影响。 目前Amazon内部运行着超过2w过微服务,但是这些微服务并不是凭空产生的,在这之前,运行的服务都是超大的单体服务,但是随着业务的发展,这种服务在整个研发的pipeline(设计→研发→编译→测试→发布→部署→运维)中都出现了一些问题。设计阶段,老的单体服务会给我们带来一些技术限制,比如有些技术只有python语言的实现,但是我们的服务使用java开发,这样我们不得不拿出一个更复杂的设计去解决类似的问题;研发阶段,随着开发人数越来越多,代码冲突的问题越来越多,我们不…

Read More Read More

苹果公司建议不要滑动关闭后台程序,因会损害电池寿命,消息属实吗?

苹果公司建议不要滑动关闭后台程序,因会损害电池寿命,消息属实吗?

閱讀本文約花費: 2 (分鐘) 据外媒报道,苹果表示,在iphone上滑动关闭应用程序可能会缩短电池寿命,并使设备变慢。是否属实? 苹果从头到尾只说过“应用无响应了才需要强制关闭后台。” 这是一次以讹传讹的经典案例,我一直都说国内所谓的“数码媒体”、“自媒体”水平真的不算太高。 以后新闻里带“外媒”俩字的,建议自行谷歌看看原文再判断。 1、2020 年 2 月 18 日,苹果说“应用无响应了才需要强制关闭后台” 当天苹果官网更新了一个页面,科普了“强制关闭应用”的操作(可能苹果也知道 iOS 13 有多烂了吧?)。 其中苹果解释了一句:只有在应用无响应的时候才需要强制关闭后台。 2、2020 年 2 月 24 日 11 点,英国太阳报说“震惊!关闭后台会让 iPhone 变慢且减少续航“ 是的,太阳报这种八卦小报的标题就是这么的 UC 震惊部。 该新闻提到了苹果新发布的“强制关闭后台”页面,并且引用了数码博主 John Gruber 在 2017 年的博文“关闭后台会降低续航且变慢”。 3、2020 年 2 月 24 日 15 点, LADbible(外媒外媒)说“苹果说关闭后台对 iPhone 电池不好!“ 和太阳报一个套路,也是引用 John Gruber 的博文说明关闭后台影响电池续航和性能。 4、2020 年 2 月 27 日,国内媒体“外媒:苹果说关闭后台会降低 iPho…

Read More Read More

方方的成名之路最应该感谢政府

方方的成名之路最应该感谢政府

閱讀本文約花費: 9 (分鐘)文|沉雁 昨天一位读者朋友私信我说,“方方被骂得那么惨,沉雁你还是该发文帮方方说说话”。我当时确实没看见骂方方的文章,我就回答了一句“在哪骂”。结果,这位读友就很不高兴了,给我回了一段有点生气的话,他认为我是装没看见。 之所以这位读友很不高兴我的没看见,根本原因是她太爱方方了,她不忍心方方被骂。我相信,像他一样爱方方爱到这般如痴如狂的状态,不是千万,而是亿万。莫名其妙,我内心深处升腾起一种说不清楚的嫉妒感。做作家能做到方方这程度,前无古人后无来者。我总觉得,方方不应该有这么冲天香阵透全球的名气,但事实不以我的意志为转移,方方现在的名气就有“我花开后百花杀”的破竹之势。 委实说,我除了看过方方几篇封城日记,我就没看她其它任何一部作品。再实话实说,我对她的封城日记没有特别的感觉,因为太没火药味了,根本不符合我们时评人的胃口。所以,我才写了那篇《我不同意方方的某些主张》。她宅心仁厚劝蔡丽之流自己辞职谢罪,我绝不同意,我坚决主张蔡丽之流应该剖腹或凌迟才算谢罪。 尽管后来我写了一篇10W加的《方方,这季暖阳下最亮的一抹芬芳》,但那不是源自我本能的冲动,而是因为什么呢?而是因为我看赞美方方的文章浩如烟海,但几乎都没把方方赞到点子上。为了显摆我看问题的穿透力,所以我才热情澎湃写了那篇10W加。 之所以我有点嫉妒方方,我始终认为,她有今天之大名,绝不仅仅是因为她文章写…

Read More Read More

面试官:你知道java类是怎么跑起来的吗?问的我一脸懵

面试官:你知道java类是怎么跑起来的吗?问的我一脸懵

閱讀本文約花費: 15 (分鐘)类从加载虚拟机内存中开始到卸载出内存为止,生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定,它在某些情况下可能在初始化阶段后在开始,因为java支持运行时绑定。 加载阶段 通过一个类的全限定名来获取定义此类的二进制字节流(没有指明二进制字节流要从一个Class文件中获取,可以从ZIP包中读取,从网络中获取,运行时计算生成等等) 然后,将这个字节流所代表的静态储存结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。 该Class对象作为方法区这个类的各种数据的访问入口完成后,虚拟机外部的二进制字节流就按照虚拟机所需格式储存在方法区中。 这里稍微理解一下对象和类的概念,对象是实例化的类。类的信息是存储在方法区中的,对象是存储在Java堆中的。类是对象的模板,对象是类的实例。 类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器。 其实加载阶段用一句话…

Read More Read More

戴森印象记

戴森印象记

閱讀本文約花費: 36 (分鐘)2020 年 2 月 28 日, 著名物理学家弗里曼·戴森 (Freeman Dyson) 在美国去世, 享年 96 岁。 戴森去世的次日早晨, 我收到《上海书评》编辑的微信, 约写一篇关于戴森的文章。 我说我只能写一篇不全面, 且并非一味 “点赞” 的文章。 诸位现在读到的就是这篇文章。 这篇文章之所以不全面, 是因为戴森太全面了——他的兴趣涉及了太多领域, 我不仅没有时间追随, 很多领域甚至没有兴趣追随, 因此注定不能全面。 至于并非一味 “点赞”, 大家读下去就清楚了。 虽然文章不全面, 我书架上和电脑里的戴森著作倒是比较全面的, 只可惜聚书快而读书慢, 已读过的只占一小部分。 除戴森本人的著作外, 我还读过美国作者 P. F. 舍维 (P. F. Schewe) 撰写的戴森传记《Maverick Genius》 (特立独行的天才) 的若干章节。 这篇文章本质上是那些阅读的随感, 也是阅读所得的戴森印象, 故曰 “印象记”。 最早读戴森是在二十多年前。 当时我在复旦, 不久将要赴美, 最后几个月闲来无事, 便从图书馆找了些闲书看, 戴森的《宇宙波澜》也在其列。 后来回想起来, 当时读那本书印象最深的细节是: 一位学生通过公开可查的资料, 汇集了制造原子弹的步骤, 精确得让戴森大吃一惊, 在给了学生 “A” (“优”) 之后, 嘱咐其烧掉文章。 …

Read More Read More

SQL 中的 NULL 你真的懂了吗?

SQL 中的 NULL 你真的懂了吗?

閱讀本文約花費: 5 (分鐘)SQL 中的 NULL (译自 NULL Values in SQL Queries) SQL 中的 NULL 到底是怎样一个概念呢?有什么要注意的吗?这篇文章就是要把它讲清楚。 查询某列值为 NULL 的数据 当想查询某一列值为 NULL 的数据时,下面两种哪个更好呢? SELECT * FROM SOME_TABLE WHERE SOME_COLUMN = NULL 还是 SELECT * FROM SOME_TABLE WHERE SOME_COLUMN IS NULL 答案是,第二种更好。 为什么呢?为什么其他的比较都不用 IS 呢?比如想知道一个字段值是不是等于1,可以用一个简单的 WHERE 子句: WHERE SOME_COLUMN = 1 所以到底为什么对 NULL 区别对待使用 IS 呢? 因为:在 SQL 中,NULL 表示「未知」的意思,就是「未知」,不知道,不了解,未知!(原文用词:「unknown」) NULL 是「未知」 在大多数数据库中,NULL 和空字符串是有区别的。 但也有例外,比如在 Oracle 中,根本就不允许一个值是空字符串,Oracle 中所有的空字符串都会自动转换成 NULL。 不过对于其他大多数数据库来说,NULL 和空字符串是区别对待的: 空字符串也是一种值,只不过是空的而已。 NULL 是一个「未知」…

Read More Read More

Coolshell:应该知道的Linux技巧

Coolshell:应该知道的Linux技巧

閱讀本文約花費: 14 (分鐘)这篇文章来源于Quroa的一个问答《What are some time-saving tips that every Linux user should know?》—— Linux用户有哪些应该知道的提高效率的技巧。我觉得挺好的,总结得比较好,把其转过来,并加了一些自己的理解。 首先,我想告诉大家,在Unix/Linux下,最有效率技巧的不是操作图形界面,而是命令行操作,因为命令行意味着自动化。如果你看过《你可能不知道的Shell》以及《28个Unix/Linux的命令行神器》你就会知道Linux有多强大,这个强大完全来自于命令行,于是,就算你不知道怎么去做一个环保主义的程序员,至少他们可以让你少熬点夜,从而有利于你的身体健康和性生活。下面是一个有点长的列表,正如作者所说,你并不需要知道所有的这些东西,但是如果你还在很沉重地在使用Linux的话,这些东西都值得你看一看。 (注:如果你想知道下面涉及到的命令的更多的用法,你一定要man一点。对于一些命令,你可以需要先yum或apt-get来安装一下,如果有什么问题,别忘了Google。如果你要Baidu的话,我仅代表这个地球上所有的生物包括微生物甚至细菌病毒和小强BS你到宇宙毁灭) 基础 学习 Bash 。你可以man bash来看看bash的东西,并不复杂也并不长。你用别的sh…

Read More Read More

未选择的路

未选择的路

閱讀本文約花費: 2 (分鐘)未选择的路 罗伯特·弗罗斯特 黄色的树林里分出两条路 可惜我不能同时去涉足 我在那路口久久伫立 我向着一条路极目望去 直到它消失在丛林深处 但我却选择了另外一条路 它荒草萋萋,十分幽寂 显得更诱人,更美丽 虽然在这条小路上 很少留下旅人的足迹 那天清晨落叶满地 两条路都未经脚印污染 呵,留下一条路等改日再见 但我知道路径延绵无尽头 恐怕我难以再回返 也许多少年后在某个地方, 我将轻声叹息将往事回顾: 一片树林里分出两条路—— 而我选择了人迹更少的一条, 从此决定了我一生的道路。 The Road Not Taken – by Robert Frost Two roads diverged in a yellow wood, And sorry I could not travel both And be one traveler, long I stood And looked down one as far as I could To where it bent in the undergrowth; Then took the other, as just as fair, And having perhaps the better claim, Because it was grassy and wanted wear; T…

Read More Read More

软件架构设计-五视图方法论(2)

软件架构设计-五视图方法论(2)

閱讀本文約花費: 8 (分鐘)1.每个人都可以做成为架构设计师 不懂软件的和刚入行的人们一听到架构设计,都认为是非常的高大上课题,是一个遥不可及的领域,一般人是不能做的。听起来云里雾里的,第一印象除了来自微软,阿里这些NB的公司里面的人其余的都不能做出架构似的,这是一种先入为主的思想,因为大家都在强调架构师的重要性,他的薪资有多么的高,在整个社会对他的认定导致很多人对架构设计望而生畏。放正自己的心态其实架构设计并没有多么的复杂。我们是从编码入行的,在编码实现功能的过程中我们或多或少的设计了属于自己的软件架构了。 为什么说软件架构师需要多少年的工作经验,因为软件架构就是系统的草图,不仅是代 码编写而且包括部署,运行、开发等这些方面进行设计,目的是为了保证软件开发、运行、扩展、性能、安全、伸缩等等质量的一个保证。只要在编码过程中不仅仅要提升编码的质量而且要留心其他方面的知识积累与学习,用不了多久你也能成为一位优秀的架构设计师。 2.什么是架构设计 我们要成为架构设计师我们需要了解什么是架构设计。简单一点,架构设计就是一个系统的草图,描述了构成系统的抽象组件,以及各个组件之间的是如何进行通讯的,这些组件在实现过程中可以被细化为实际的组件比如类或者对象。在面向对象领域中,组件之间的联通通常面向于接口实现的。 在“软件架构简介”中David Garlan 和Mary Shaw 认为软件架构师…

Read More Read More

Kubernetes HPA 详解

Kubernetes HPA 详解

閱讀本文約花費: 32 (分鐘)Kubernetes HPA 详解 在前面的学习中我们使用用一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个毕竟是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:HorizontalPodAutoscaling(Pod水平自动伸缩),简称 HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量,这是 HPA 最基本的原理: 我们可以简单的通过 kubectl autoscale 命令来创建一个 HPA 资源对象, HPAController默认 30s轮询一次(可通过 kube-controller-manager 的 –horizontal-pod-autoscaler-sync-period 参数进行设置),查询指定的资源中的 Pod 资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能。 Metrics Server 在 HPA 的第一个版本中,我们需要 Heapster 提供 CPU 和内存指标,在 HPA v2 过后就需要安装 Metrcis Server 了, MetricsServer 可以通过标准的 Kubernetes A…

Read More Read More