从一个典型的案例谈起
Aliware
微服务开发不简单
开发和部署相对简单:单个微服务的功能可以更快地更改,因为可以独立部署,影响范围更小,启动和调试单个微服务的时间成本相比于单体应用也大大减少。
横向扩展简单:根据业务的高峰低谷周期快速的横向扩展非常简单,因为单个微服务通常很小,可以随着系统整体负载的变化更快地启动和停止。
架构升级灵活:单个微服务的内部架构可以迅速升级,因为微服务之间是松散耦合的,只面向定义好的通讯接口进行编程。这使开发团队能够基于自身的技术背景和偏好灵活选择,而不会直接影响其他应用程序、服务或团队。
更好的容错性:微服务之间可以实现更好的故障隔离,单个服务内的内存泄露等故障不容易影响其他服务,相比单体应用⼀个组件故障会拖垮整个系统。
服务之间使用远程调用进行通讯,这比进程内的直接调用复杂很多。由于通讯链路的复杂性,可能会出现很多不确定的问题,会出现远程调用不可用或者延迟较高的情况,开发⼈员需要能够处理这些偶发问题,避免影响业务。
随着业务的发展,微服务之间的拓扑图开始变得复杂,排查问题变得困难,搭建完整的开发测试环境成本也越来越大。
当功能涉及到多个微服务模块时,迭代时需要谨慎地协调多个开发团队的迭代排期,才能保证迭代能够按时交付,达到敏捷开发的效果。
⼀个微服务成功落地的典型案例
1、业务孵化期
2、业务快速发展期
1. 开发测试提效
2. 安全发布
3. 屏蔽偶发异常导致的风险
3、业务成熟期
微服务治理在云原生场景下的挑战
Aliware
企业上云的四个阶段
1、云上部署
2、云原生部署
3、微服务化
4、服务治理
微服务治理在云原生下的挑战
1、在效率上面临的挑战
在开发阶段,我们需要考虑的是,业务应用上云之后,如何让本地开发的应用,很好的部署云上的业务进行联调?通常我们的微服务不可能在本地完整的部署⼀整套系统,所以本地开发的应用只是整个微服务链路的⼀小部分,这包括我们的流量需要能够轻松的从云上,引导到本地,便于我们做开发调试,或者我们在本地能够很方便的调用云上部署的微服务进行联调。这在微服务上云之后,比原来在自身机房进行开发联调更加困难。
在线上运维方面,我们通常需要频繁的对微服务进行变更,这些变更通常就会引发⼀系列的问题,例如在白天高峰期做发布,通常都会导致业务流量出现损失,我们的研发人员不得不选择在晚上业务低峰期做变更,这大大降低了研发人员的幸福指数,因为他们不得不面临熬夜加班的困境。如果能在白天大流量高峰期也能进行流量无损的变更,那么这对于研发⼈员来说将是大大提升研发效率的事情。
微服务框架通常会引入服务治理的逻辑,而这些逻辑通常会以 SDK 的方式被业务代码所依赖,而这些逻辑的变更和升级,都需要每⼀个微服务业务通过修改代码的方式来实现,这样的变更造成了非常大的升级成本。以阿里巴巴为例,阿里内部⼀个中间件 SDK 的升级,如果要在整个集团铺开,通常需要消耗的时间以年为单位进行统计,这里面也会消耗每个微服务应用的研发、测试等庞大的资源,效率非常低下,如果能够以无侵入的方式实现中间件 SDK 的升级,那么将会是⼀件非常高效的事情。
进入云原生体系之后,以 K8s 为主的云原生体系强调集群之间的灵活调度型,以 POD 为单位任意的调度资源,在被调度后 POD 的 IP 也将相应地发⽣变化,传统的服务治理体系,通常以 IP 为维度进行治理策略的配置,例如黑白名单策略等,但是当进入云原生场景后,这些传统的治理策略都会面临失效的问题,因为 POD ⼀旦被重新调度,原来的治理策略都将不再使用,如何能让服务治理体系更加适应云原生体系,也是我们要面临的⼀大挑战。