软件行业发展到现在,很多人都曾被大而全的产品折腾得苦不堪言。因此,近些年云原生(Cloud Native)的概念也渐渐扩散开来。作为云原生基础设施之一的"微服务"也备受瞩目。那什么是微服务,微服务又解决了哪些问题呢?今天小编以腾讯的开源微服务框架Tars为例,跟大家聊聊微服务。
现实中的问题
在微服务以前,存在两种情况:
- 单体架构:一个系统包含所有功能(大而全);
- 多体架构:多个系统由多个不同团队开发,开发标准(SDK、代码风格、验收标准等)各不相同。
单体架构的问题
- 单体架构中的系统代码量过大,容易吓跑新的开发人员;
- 超载IDE,代码体量大,IDE运行加载慢,影响开发效率;
- 持续部署困难,牵一发而动全身,无法进行快速迭代和频繁部署;
- 扩展困难,不能通过简单地增加实例的方法应对性能瓶颈,无法针对IO密集型、CPU密集型或内存密集型的业务进行资源分配;
- 扩展障碍,功能过多不可避免地由多人负责,人数越多,协调开发进度,更新产品越困难;
- 被原有技术栈绑架,单体架构强迫你必须在原有的技术栈上进行新功能开发,而与行业内新的语言和新的技术无缘。
既然单体架构有问题,是不是我简单的把一个系统拆分成多个系统就行了呢?那我们来看多体架构。
多体架构的问题
从开发的角度:
- 不同的产品,业务模型多样化,开发语言不同;
- 不同产品之间的业务通信协议不统一,对接不同产品时的学习成本大;
- 容错、容灾、可扩展性等质量指标参差不齐,导致开发人员不能很好的