思想与落地
1. 工程的复杂度体现在,探索到原则(道)很重要,落地(术)同样重要,可能更加复杂。所以在不同的领域经常发现,一些先进的思想和哲学在几十年前就提出,但是经过历史的多年发展才能一定程度的发扬光大。比如 unix 对分布式的探索及规范的制定。比如 paxos 算法从发表到推广经过了几十年。这些都是科学的正常生命周期,因为很多情况受当时历史和客观条件约束。天时-地利-人和。我们即应该对早期思想的先进指导性叹为观止,也应该对工程演进的周期和不确定性做到慎重考虑。这个也跟“保持接口与实现的简单性,比系统的任何其他属性,包括准确性、一致性和完整性,都来得更加重要。”同样意思,接口:就是抽象,思想,实现:就是工程实践。
那么问题来了,如果对历史的时间轴做一个跨度几十年的滑动时间窗口,我们窥见几十年的思想和当时思想的深度落地,那么在当前的时间窗口的起点,我们有哪些思想和哲学会影响几十年后的历史?
2. 今天以微服务为代表的分布式系统,是如何看待“简单”的?所谓简单,就是专注。我理解分两个维度:一是对一个事物完整生命周期的分析和理解;二是对多个事物不同生命周期的阶段是否可以抽象为“逻辑上原子性的另一个高维度的事物”(稍候会拆解)进行正交分解和复用。因为当前维度的结构已经 hold 不住当前量级的需求。说人话就是合久必分,分久必合。
1. 合久必分:从业务层面:我们通过计算机设计的系统其实就是现实世界的映射,用一个一个虚拟的工具人构建成虚拟世界的系统,从现实社会发展来看,比如生产饮料,一个个工具人一窝蜂去制作瓶子,然后一窝蜂去灌裝,然后一窝蜂去搬运...,一开始订单不大,完全能 hold 住,然而后来量级大了,发现大部分的时间都在解决资源协调的问题, 后来上了生产线,我们把工具人分类,工具人 1 只做制作瓶子,工具人 2 只做灌装,工具人 3 只做搬运,后来我们因为工具人 1、2、3 名字太难听,给他们改名为“微服务”。
所谓简单就是:我只做一件事,只专注上下游接口,对上下游是透明的。
2. 分久必合:从技术层面:好了服务从 1 到 N 了,那么问题来了,既然有多个服务,我每个服务都得去 get N(服务发现),choose 1 from N(LB),去认证需求,去限流,去部署,重复的功能从逻辑上说应该抽取出一层,这一层专注做这一件事,对上下层透明,唯一交互的只有接口,比如专注注册发现的注册中心,认证的授权中心,流控的网关等。
这一层就是我上面称为的“逻辑上原子性的另一个高纬度的事物”,之所以叫原子,是因为专注一件事情,之所以叫逻辑上是因为这一层从逻辑上是存在的,但是在实现层面或者物理层面,有多重形式,耦合度和侵入性不同,比如:放在代码里调用处理,在一个 jvm 进程里,有侵入性;有些功能抽出独立的进程做成 sidecar,无侵入;有些功能必须坐在独立的另外一个中间件里;侵入维度见 P.S.
而从更大维度,整个数据,存储层都可以认为是逻辑上原子的事物,各种 db,cache,mq,search 中间件理应对上层透明,包括分布式的一些特性如 replica,sharding,一致性,跨中间件一致性都应该对上层透明。然而由于历史和客观原因,有些技术其实是对于当前架构的补丁,比如,客户端处理分库分表,加代理中间件等等;有些技术不能融为一体对外透明,比如 db,cache,mq,search 这些不同的数据不能跳出硬件的架构,还是得拼搭着用。但是最新一些中间件本身的计算与存储分离的思想,还有分布式数据库,多少是按照这种方向去发展。
理想丰满的未来数据层,对外就是 CRUD 接口,其他的一概不用考虑,这一层请把高可用,高并发,高扩展等封装到不需要我了解,真正透明的程度。
从这个角度叫,产品经理对程序员所说的“我不关注你怎么实现,我就要这个功能”,从逻辑上是合理的,从情商上不通。
P.S. 这个侵入层级按照范围 同一线程 ->跨线程 ->同一进程 ->跨进程(local 进程是特殊的一种)->同一 cluster ->跨 cluster -> 跨城市 -> 跨国家 -> 跨大洲 -> 跨星球(参考马斯克)->跨其他宇宙的量级(太阳系,银河系,星座,等等)-> 跨维度;:你这扯的也太远了。
3. 上面的“逻辑上原子性的另一个高维度的事物”维度扩展到整个存储一层,其实可以再扩展一层,整个分布式系统从逻辑上原子,做一个分布式操作系统,对上层透明,k8s 等做的就是类似这种事情。
4. 如果再扩展一层,上升到业务层面,就是 serverless,我不关注后端实现,给我服务就行,整个架构对我业务来说是透明的;
5. 至于“逻辑上原子性的另一个高维度的事物”,逻辑上抽象到哪一层,case by case,看情况,既不能考虑太远不切实际,也不能只关注当前一亩三分地,至少扩展到 3-5 年?
6. 什么样的结构有什么样的限制。如果要增长就要突破限制(升维)。不只是技术。然而问题的关键在于,思想没有什么限制,但是落地的限制就多了,比如重力,比如物理学规律,比如成本,贫穷使我们相遇。
你能这么想说明你的想法可能有价值(实践检验),你能落地说明你这个人有价值。
7. 引入一个方案,解决上一个问题的同时,会带来新问题,你需要折衷,trade-off;
8. 语言的优点在于能够构建部分对错的想象,传递情绪,人们倾向于听一个好故事;科学、数据的意义在于在边界内验证想象的可行性,拆掉所有情绪,进入理智。写多了。
9. 建立回调
callback{
if 喷子喷
开启反甲;
}
版权声明: 本文为 InfoQ 作者【型火🔥】的原创文章。
原文链接:【http://xie.infoq.cn/article/5c91f84a8180a9a7a26ef5b73】。文章转载请联系作者。
评论