是否要拆分,架构师最先要下的判断
诚实评估产品是否真的已经超出单一代码库的承载能力,而不是默认认为一定要用微服务。
把一款产品拆分成多个服务,并不天然就是一种改进,而在迪拜聘请微服务架构师的企业,往往正是已经注意到这一点的企业。被广泛引用的参考资料 microservices.io,把微服务架构定义为将一款应用结构化为一组可独立部署、松耦合的组件,每个组件拥有一项业务能力,但它自己列出的缺点清单,与优点清单一样长:分布式运维更难调试,服务之间需要额外的网络调用,数据一旦分散到不同数据库中,一致性也更难维持。
这正是这个角色存在的意义所在:在写下任何代码之前,诚实地做出这个判断。微服务架构师会审视产品真正需要什么,哪些部分真的需要独立扩容或独立部署,哪些团队在共享代码库里不断相互冲突,然后判断这种拆分是否值得承担额外的复杂度,如果值得,服务之间的边界究竟应该划在哪里。边界划错了,日后纠正的代价会很高,这正是为什么值得请一位有经验的人一次性把它划分妥当。
这个角色决定什么
一个决策和一张地图,由搭建服务的开发人员来执行。
诚实评估产品是否真的已经超出单一代码库的承载能力,而不是默认认为一定要用微服务。
哪项能力应该独立成一个服务,依据是它是否需要独立于其余部分扩容、部署或失败。
服务之间是通过 API 直接通信、通过事件通信,还是两者混合,这是经过审慎决定的结果,而不是随意长出来的。
当某个服务变慢或宕机时,整个系统会如何表现,确保局部故障不会演变成全面中断。
哪个服务拥有哪部分数据,以及需要同一信息的服务如何在不直接共享数据库的情况下共享数据。
一旦服务数量多到需要自动化而非手动处理,应如何部署和扩容多个服务。
重要技能
对何时拆分的判断力,和对如何拆分同样重要。
| 技能或工具 | 优秀表现是什么样的 | 为什么重要 |
|---|---|---|
| 领域思维 | 能解释他们如何依据业务本身、而不仅是代码,识别出一条自然的服务边界 | 划错边界的服务会不断需要彼此配合才能工作 |
| 容器编排 | 理解 Kubernetes 这类平台究竟解决了什么问题,以及什么时候是真正需要,而不是默认加上去的 | Kubernetes 自己的文档把它描述为大规模管理容器化工作负载,而这对一个小系统来说是还用不上的开销 |
| 分布式系统的取舍 | 坦率谈论最终一致性和局部故障,而不只是强调独立性带来的好处 | 这些取舍正是 microservices.io 列出的这种模式真实存在的缺点 |
| 与产品负责人的沟通 | 能向不写代码的人解释一次拆分,或者一次不拆分的决定 | 这个决定影响的不只是代码库,还有交付速度和预算 |
| 克制 | 在产品确实还不需要拆分时,建议继续保留单一代码库 | 过早拆分会为产品当下还用不上的收益,付出真实的运维成本 |
Cloud Native Computing Foundation 在其 关于我们 页面中指出,云原生技术帮助组织构建具备韧性、可管理、可观测、支持频繁且高影响力变更的系统,而这正是聘请微服务架构师实际要交付的结果,而不是为了这种模式本身而拆分。
合作方式
咨询服务很适合大多数首次合作,因为核心产出,也就是一个诚实的拆分决策和一张服务边界地图,本身就是一段边界清晰的顾问式工作。限定范围项目适合还希望架构师按这张地图搭建最初一两个参考服务的企业。专属合作适合边界会随新能力不断加入而持续演变的较大、成长中的产品。招聘支持适合希望长期把微服务架构师留在自己薪资名册上的企业。
评估候选人
能揭示真实判断力、而不只是熟悉这套模式术语的检查方式。
一位实力候选人至少有过一次劝说客户或雇主放弃微服务的经历,这比背诵这种模式的好处更能说明问题。在您迪拜聘请微服务架构师、而对方只会给出一种答案之前,值得直接问一问。
描述它做什么,问他们会考虑在哪里划定服务边界,或者是否现在就不划分,留意他们的推理过程。
几乎每一个真实项目都曾把某条边界划错过一次。他们是怎么发现的,又做了哪些改动,这比一个干净漂亮的成功故事更能说明问题,也是在只凭作品集聘请微服务架构师之前,值得深入追问的一点。
关于两个都需要同一信息的服务如何避免直接共享数据库,一个具体的回答能体现真实经验。
询问他们什么时候会引入 Kubernetes 这类平台,什么时候会刻意暂缓,因为这里的克制是一个好迹象。这也是在为一个尚未达到规模的产品聘请微服务架构师之前,最能说明问题的信号之一。
认证
编排平台认证是最接近的选项,不过没有任何一项能直接认证架构判断力。
Cloud Native Computing Foundation 和各大云服务商都提供专门覆盖容器编排的认证。这些证书在拆分决策已经确定之后,是工具深度的合理信号,在您聘请一位同时负责编排方案的微服务架构师时,值得核实。
一次真实的拆分决策,包括一次他们劝说客户放弃的经历,比任何编排证书都更能说明判断力。这才是您聘请微服务架构师时应该索取的证据。
阿联酋考量
两者都是架构决策,而不是事后才想起来的补充项。
阿联酋的联邦数据保护法适用于通过电子方式处理的个人数据,无论处理实际发生在哪里。微服务架构师应该提前决定哪些服务允许持有个人数据,而不是留到日后一个服务一个服务地被动发现。
多家主要云服务商都为容器和编排平台提供阿联酋区域。尽早做出这个决定,既影响阿联酋用户的访问延迟,也影响日后数据存放地问题的答案,这是您聘请微服务架构师那一刻起就值得提出的问题。
直接解答
这正是这个角色首先要回答的问题。被广泛引用的参考资料 microservices.io 在列举优点的同时,也列出了真实的缺点,包括运维复杂度和拆分系统带来的额外网络调用。一位值得聘请的微服务架构师,会在您的产品还不足以支撑拆分时,建议采用更简单的单一代码库方案。
决定哪一块功能应该独立成一个服务,哪些应该保留在一起,依据是真正需要独立扩容、独立部署或独立失败的部分。边界划分不当,服务之间会过度频繁地通信,或者纠缠得无法独立部署,这就违背了拆分的初衷。
在服务之间需要通信的地方两者有所重叠,但微服务架构师专注于一款产品内部如何被拆解为多个服务。集成架构师的范围更广,涵盖企业各系统(包括第三方系统)之间如何交换数据。
通常可以,尤其是最初的一两个服务,之后它们会成为其他开发人员按同一模式搭建其余服务的实际参考。
常见的迹象包括产品不同部分需要以截然不同的速度扩容、不同团队在同一代码库里互相牵绊,或者因为一切都要一起发布,部署已经变得过于冒险。微服务架构师能诚实地评估这一点,而不是想当然地认为拆分永远是正确答案。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。