上古时代的应用
用户访问请求通过各级负载均衡到达了反向代理层,反向代理层会把访问请求转到服务器集群中,这就是经典的单体应用 + 水平扩展
缺点:
-
牵一发而动全身
每台服务器部署的代码都一样,每一个小的改动都很有可能影响到其它的功能点,所以每次改动都要做一个全链路回归 -
回滚很痛苦
所有代码一起上线一起回滚,就有可能出现我写好了一个功能,但因为别人的 bug 而被回滚了 -
发布周期长
平均半年才发布一次版本,无法快速适应市场需求 -
应用复杂度很高
○ 代码会被混用,写的一个基础代码可能会被各个服务方共同使用,小的改动可能带来意料之外的影响。
○ 数据访问混乱,数据可能会被单体应用里的各个应用所引用(底层数据未做隔离的代价)
这一类代码也就是程序员们经常调侃的 “屎山”,谁也不敢碰的代码
996 时代的应用
当引入了微服务的架构之后,应用也来到了 996 的时代,此时,每一个服务器部署的应用都不一样,每个应用的底层数据库也是不同的,这就避免了底层数据模型的混乱
优点:
-
小步快跑
每个应用都可以做独立演进、独立部署、快速迭代 -
团队赋能
每一个微服务背后都有一个微服务的团队,包括前端、后端、测试等完整角色,这种情况下开发团队的话语权肯定要高于传统瀑布模型团队的 -
边界清晰
○ 服务拆分:以大化小
○ 体现了分治思想:三高应用
互联网精神:小步快跑
那么在微服务的架构下,大厂里的团队组成是什么样的呢?
-
一般团队成员都是小规模,同时 Leader 也并不是专门管人的角色,可写代码可和产品拉扯
-
阿里系都是小规模的微服务团队,比如订单域,订单和支付系统的对接可能由一个团队来负责,订单状态流转又是另一个团队来负责
-
在每个精英团队都会做双备份机制,重沟通,轻文档,业务知识的积累一般是沉淀到个人,因此每个开发人员在自己业务线上积累的知识非常重要,快速定位问题、解决线上问题都需要这个人来参与,对每个重要功能点都会指定一个 Feature Owner,同时还会指定一个 Backup,保证有两个人能做线上的支持
-
测试人员:阿里系推崇开发自测,功能和质量保证完全由个人承担。测试同学致力于测试平台、效能平台的搭建。对于功能性测试来说,一般不指派到各个团队中,而是指派到中间的职能方,它可能是支持当前事业部或多个团队的测试需求,从集成测试的角度衡量质量保证的计划
从上面的团队架构也能看出来,每个人的代码能力都是硬指标,只会测试或 CRUD 的程序员在职场上的生命周期都很短
同时,架构师作为 “设计师” 的角色,阿里系大量采用了跨团队架构师的职责,因为架构师要有整体视角,所以要有整体的业务方向视角,同时还有其他的职能团队负责一些特殊的业务,比如为应用搭建手机端页面等等
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/tlg/output/%E7%99%BD%E8%AF%9D%E5%BE%AE%E6%9C%8D%E5%8A%A1-%E5%A4%A7%E5%8E%82%E6%98%AF%E6%80%8E%E4%B9%88%E7%8E%A9%E7%9A%84_%E5%B0%8F%E7%8E%8B%E6%9B%BE%E6%98%AF%E5%B0%91%E5%B9%B4%E7%9A%84%E5%8D%9A%E5%AE%A2-CSDN-%E5%8D%9A%E5%AE%A2/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com