什么是微服务

2019/01/22

164

什么是微服务

微服务架构是SOA思想某一种具体实现。是一种将应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并采用轻量级的通讯机制(TCP)进行通信。

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署。这些服务的集中化管理已经是最少的,它们可以用不同的编程语言编写,并使用不同的数据存储技术。

为什么要使用微服务

微服务解决了什么问题?

在微服务的最佳实践中都提到如果一个项目以微服务作为起点,则大概率会陷入项目失败。

微服务的本质是解决了团队分工的问题,当项目团队的开发人员无法解决大型单体应用的问题或虽然可以解决问题,但成本高昂的时候,微服务往往才是最佳实践。

通过从外围不断拆分单体架构业务,以细粒度的单项服务的形式发布服务,最终将单体架构微服务化。

微服务带来了什么挑战?

微服务首先是对组织架构的调整提出了新的挑战,微服务要求每一个服务尽可能地独立和内聚,这要求这个团队服务2Pizza风格,也就是说每一个团队都尽可能的包含从开发到测试到运维人员组成的独立项目组。而不是传统大型企业中以横向切割的形式开发、运维、测试各是一个独立部门。

2Pizza:贝索斯把披萨的数量当做衡量团队大小的标准。如果两个披萨不足以喂饱一个项目团队,那么这个团队可能就显得太大了。人的大脑无法处理太多人的意见,人多的结果往往导致人云亦云,无法凸显个人的独特想法。参与的人数越多,会议的效率就越低下。大多数与会者最终将会与别人达成一致意见,而不是发表自己独特的见解或想法。因为由于团队太大,成员之间无法深入沟通,结果导致扯皮推诿,最终让项目陷入停顿状态或彻底失败。

微服务的第二个挑战是带来了分布式下开发、测试与运维的复杂性。微服务本质上并不是什么银弹,它解决了团队面对单体架构疲于奔命的开发和部署问题,但是也带来了新的问题。

在单体开发过程中,开发人员不会想到方法调用会失败、会重试、要幂等。测试人员不会考虑几十个应用怎么一起集成测试,运维人员不会考虑下游应用挂了对我有什么影响。意识到分布式下开发、测试与运维的复杂性,并掌握这些负责问题的方法才是更主要的。

评论