知其然,知其所以然。在上一篇博文中我们聊到 微服务的本质 就是一种新的协作机制,可以加速分工、促进合作,但为什么微服务有这种效用呢?今天我们来聊聊其背后的原因。
在业务互联网化之前,我们建设的大部分IT系统都是供内部员工使用的,主要用于提升办公、管理的规范和效率,以及通过无纸化来降低办公成本等。但现在互联网已经成为获客、销售和服务的载体,跟以往相比,业务形态的变化越来越快,也越来越多样化。原先我们经年累月在物理世界构筑起的防御城墙,例如:广告渠道(广播电视或户外等)、销售网络(代理人或实体店等)、客服中心等,都被互联网瞬间推平了,这完全是降维打击。
行业边界变得越来越模糊,跨界竞争越来越白热化,在这个没有天然屏障的世界里赢者真的可以通吃。在这个巨变不断的时代,再睿智的管理者也无法预见业务的发展,要不然各行各业不会出现这么多新巨头。就像在两眼抹黑的环境下,我们只能小步前行,不断创新、迭代和试错。天下武功唯快不破,内在的梦想和外在的压力,呼唤更加精细的分工、更加广密的合作,只有这样才能提升进化的速度,从而更好地适应不断变化的外部环境。
领域驱动设计让分工更加高效
为什么说微服务可以加速分工呢?单体式架构的特点就是不同类型的业务逻辑混杂在一起,彼此之间没有明显的物理边界,所有人都在维护同一个代码库,耦合度非常高。在业务需要快速迭代的当下,每次发版本都要全量回归测试,无法并行开发,这样很难提升速度。微服务化就是借助领域驱动设计(DDD)理论将单体式拆解成多个彼此独立的业务组件,高内聚低耦合,每个组件聚焦各自业务,避免变更范围无法有效控制。
除此之外,著名的“康威理论”告诉我们:组织架构决定了系统架构,每个微服务组件都应该由一个小而精的团队维护,最适合的团队规模就是“两张披萨”可以吃饱的人数。通过限制代码和人员的规模,微服务让业务更聚焦、分工更精细、组织更简单、沟通更高效。
交互机制标准化让合作更简单
没有分工就没有合作,如果每个人的才能相似,又干同样的活,那合作的必要性就降低了,更多是竞争。为什么微服务可以促进合作呢?我们可以将合作的双方抽象成两个节点,合作就是在两个节点之间建立连线。在单体式时代,系统间的交互存在许多协议,例如:EJB T3、RMI、SOAP、Dubbo、Hessian 等,跟不同的系统通讯需要依赖不同的协议,这种情况下学习、沟通和维护成本都很高,不利于合作。而微服务将通讯协议统一为HTTP,组件或系统间的交互全部采用RESTful API,报文以JSON为编码格式,同时引进服务注册、发现等机制。这些技术理念都是借鉴自世界上最大的合作网络:互联网,包括超文本传输协议HTTP、域名系统DNS。简单、统一和松耦合的机制有利于合作。
因此,微服务可以帮我们加速分工、促进合作。在微服务架构下,软件的复用率更高,研发的并行性也更高,从而以更快的迭代速度打磨出更好的产品,在更高的质量属性保障下全天候服务全网用户,同时资源利用更精细高效,让我们的产品具备更好的成本优势。拨开云雾,看清微服务的本质,找到我们学习新技术的内驱力。当然,微服务想要发挥最佳的效果,必须要跟容器云和DevOps结合,应用所依赖的其他服务最好是云化的,例如:传统的网络存储方案NAS就需要改为云存储,这样应用和关联服务都具备弹性伸缩能力,在业务量爆发性增长的情况下,系统能够快速地扩容,无需从头到尾手工扩容。记住一句话:微服务,就是加速分工、促进合作,让我们进化得更快!
坚持原创不易,如果你觉得有价值,麻烦动动手指点个 「 赞 」,让更多小伙伴可以看到,我会更有动力坚持分享的。另外,我后续还会分享职业规划、应聘面试、技能提升、影响力打造等经验,欢迎 关注 本专栏或微信公众号 「 IT老兵哥 」!
关注「IT老兵哥」,赋能程序人生!近期热评文章《 架构师入门系列 》:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。