微服务的探讨


微服务从几年突然火了起来,经常在各种地方见到,刚好有空,整理了一下我的看法。我在18年开始参加工作,刚出来工作时认为微服务是一种“先进”的设计风格用上了就是好的,然而最近回头看,微服务只是为了解决某一些问题的方案,并不适用于所有系统。选择架构,在我看来更像是买东西:找到需要的东西,并且挑出代价最小的质量最好的。没有过时的架构,只有合适的架构。

微服务架构

微服务是一种通过多个小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言,不同的数据存储技术,运行在不同的进程之中。服务采取轻量级的通信机制和自动化的部署机制实现通信与运维。当系统规模大,或程序需要修改的时候,其部署的成本、技术升级的迁移成本都会变得更为昂贵,有一个很常用的解决问题思路,就是分治法:把一个大问题分成N个小问题去解决。微服务的火热,一方面是微服务所需要的基础设施:注册发现、跟踪治理、负载均衡、传输通信、持续集成部署已经有了很多成熟的解决方案;另一方面是越来越多的业务场景信息化,导致我们的系统越来越庞大。

优点

  • 服务自治。每一个服务都是一个独立的小应用,可以根据需要去选择该服务使用的编程语言、数据库等,只需要对外接口采取一致通信协议跟格式。《人月神话》里面有一个很出名的理论,一个人10天能完成的活,加到10个人也不会1天完成。服务的拆分也有助于拆分团队,控制单个团队规模,增加开发效率。
  • 容错性,可靠系统完全可能由会出错的服务组成。在微服务的设计中,有自动的机制对其依赖的服务能够进行快速故障检测,在持续出错的时候进行隔离,在服务恢复的时候重新联通。

缺点

  • 数据一致性。单体服务时,数据一般都存在同一个数据库中,数据库能很好的保证事务。但服务拆分以后,不同服务有自己的数据库,一个用户请求可能需要多个数据库,做跨库事务是一件很头疼的事情。
  • 如何拆分才是合理的?采用服务来构建程序,获得的收益是软件系统“整体”与“部分”在物理层面的真正隔离,这对构筑可靠的大型软件系统来说无比珍贵,但另一面,其付出的代价也同样无可忽视,微服务架构在复杂性与执行性能方面做出了极大的让步。一套由多个微服务相互调用才能正常运作的分布式系统中,每个节点都互相扮演着服务的生产者与消费者的多重角色,形成了一套复杂的网状调用关系。对原有系统采用哪种划分方式才能让服务间调用更少更简单?这是一个需要考虑的问题

结论

微服务更适合于业务复杂、规模庞大的系统。正如单线程能很好完成任务,没必要用多线程。

热门相关:最强狂兵   大神你人设崩了   霸皇纪   第一神算:纨绔大小姐   网游之逆天飞扬