2018年微服务服务治理现状

目前就2种方案

1. 服务治理框架方案,基于业务代码侵入式的方案

单语言最全 Java体系的 Spring Cloud 全家桶套餐 优:成熟大规模验证 劣: 单语言,其他语言接入麻烦
支持多语言的 Tars(腾讯) 服务治理框架 优:腾讯十余年的服务治理经验的开源输出,框架本身完整 劣:只能在平台上玩,外部生产案例较少
其他语言自实现的,如PHP的Swoole方案,Golang的Gokit、GoMicro等 优: 自主可控,随意定制 劣: 需要基础架构团队来hold
其他的一些RPC框架,因为不是一套的服务治理框架这里不谈

本方案最大的劣势是业务代码侵入,要潜入一大堆业务无关的代码,维护客户端的成本也非常巨大

2. ServiceMesh服务网格方案,以Istio为代表的以SideCar(边车)流量代理的方案

Istio背后由IBM和Google共同支持,被誉为下一代的服务治理框架
全套解决方案,服务治理需要的功能统统都有,默认需要运行在Kubernetes上

宜人贷有部分业务已经线上使用 (宜人贷Kubernetes 容器云实践方案 https://mp.weixin.qq.com/s/Mn0TWdiuJSiYw5DlBlT61g)
支付宝公司蚂蚁金服也在持续探索中 (蚂蚁金服大规模微服务架构下的Service Mesh探索之路 http://www.servicemesher.com/blog/the-way-to-service-mesh-in-ant-financial/)
其他有实践的公司: 优信二手车

据公开的资料显示,唯品会,新浪微博都是采用SideCar(边车)流量代理的方式做的多语言接入
Sidecar就是ServiceMesh的雏形

本方案最大的优势是0业务代码侵入,现有业务项目可以直接接入,同时天下没有免费的午餐,最大的劣势是复杂,需要懂操作系统,懂网络,懂容器,懂Kubernetes
后续如果Istio在云上成熟,配套的管理工具成熟,能一定程度降低门槛,让业务开发在OPS上解放出来。

学习推荐

  • IBM 微讲堂 Istio 系列 https://developer.ibm.com/cn/os-academy-istio/
    目标听众:对微服务治理感兴趣的企业决策者、技术调研者、架构师、技术开发人员、运维人员等。
  • 免费的Istio在线实验平台 https://www.katacoda.com/courses/istio
  • 中文用户 ServiceMesher 社群 http://www.servicemesher.com/blog/

Istio能用于生产了么

截止2018年5月6日目前Istio版本号还未达到V1.0,官方也未宣布生产就绪,所以不能用于生产
目前Istio除了不还不完全成熟以外,还有性能问题

当前Feature Status(Road map)

Istio成熟状态 可以在这里查看目前Istio各个组件模块的完善程度

PHP在服务化微服务中遇到的问题

项目大了后服务化是必然的!
想象下几十个PHP项目,里面有大多数项目有同样的功能需求,我们可以用复制代码解决
但是对代码维护来说简直是噩梦,一次调整,调整多个项目,简直爽歪歪
先谈服务化拆分,再谈用微服务落地。 做好服务化是目的,用微服务落地是实现方式
那么微服务落地需要一大堆的服务治理能力来支撑,服务注册发现,断路器,网关,RPC等等
微服务中服务注册发现,总不可能手动管理各种服务,那么得有服务注册发现这个东西
由于apache php ,PHP-FPM php不是常驻内存的方式运行,导致了在服务注册发现等方便不能做,服务注册发现又是基础
正因为这个特性让PHP在虚拟主机年代大放异彩,也是因为本身特性导致PHP在服务化,微服务领域落地困难,不过就没解决办法了? 办法是有,但是小公司玩不起来。下面看看市面上的解决方案。

目前用PHP做微服务的解决方案

要用PHP做微服务必须要搞定微服务的服务注册发现问题

Agent模式

微博采用了这样的方式,在跑PHP-FPM的机器上跑了一个Agent(这个和后面会讲到的Service Mesh的 Sidecar模式很像)
通过Agent去完成服务注册发现,调用方通过Agent去调用。Agent作为一个包裹层。
Agent其实是后面在Service Mesh节提到的Sidecar的雏形。

以Swoole为基础的常驻内存damon模式

Swoole是PHP的一个扩展
使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。
基于Swoole开发的php程序是直接常驻内存damon的方式运行的
所以这样就可以方便的做服务注册和发现了
基于Swoole体系的开源PHP微服务框架有
Swoft
PHP-MSF
GroupCo
SwooleDistributed
Tencent/Tars

综述PHP微服务落地

综上述
方式1 以微博为代表的Agent代理模式(php-fpm模式运行的php程序因为运行机制问题,导致只有Agent的模式才能做服务注册发现,极少公司有这个技术支撑)
方式2 以Swoole为基石的常驻内存damon模式
生产可用问题,没有广泛的使用经验,目前有部分有强力技术支持的公司在运用,如果要用于自己的环境需要有技术团队去完成这个落地,需要开发一些配套的管控基础设施
毕竟没有服务治理能力贸然上微服务就是自己搞死自己的事

未来PHP做微服务的解决方案

Java体系以 Spring Cloud、Dubbo为代表的微服务框架得到广泛应用的时候无疑是对java编程语言的助推加持
现有的微服务框架不是就完美了,任何事物都是具备两面性的,现有的框架面临SDK更新,业务代码侵入,编程语言绑定(要做非常多的SDK)等诸多问题

Linkerd横空出世,提出了一个叫做Service Mesh的东西中文翻译叫做服务网格
随后以Google Ibm联合起来紧跟着发起了Istio项目
Service Mesh是一个非常新的概念,在2017年才提出,被誉为下一代微服务框架
试图解决现在的微服务框架的诸多问题,最终实现包含现有框架的所有功能,而且还能实现业务代码零侵入

Service Mesh使用了Sidecar模式接管了网络,所以才能实现业务代码零侵入
正因为Service Mesh的这样的架构设计,所以可以真正的实现编程语言无关性,不同服务可以使用不同的编程语言,不需要为不同的语言每个都去维护SDK

那么用PHP做的服务,不论是apache php ,PHP-FPM php, 还是Swoole damon都可以,可以做到真正的语言无关,应用程序本身是不关心微服务那一堆事情的

目前Service Mesh还存在的问题
体系还是非常早期的阶段,以Istio为例,目前大部分特性都是处在Alpha阶段(https://istio.io/about/feature-stages.html)
性能损失问题,据网上看到的测试Istio目前的版本有40%的性能损失(我觉得这个不是重点,只看字面40%,想象下实际业务场景呢? 解决的问题的收益远大于问题,况且后期肯定有优化的空间)
可能需要K8s才能更好的落地,以Istio为例虽然不强制依赖k8s,但是在k8s运行Istio才是最佳选择,使用k8s也是需要学习成本的(我觉得用k8s不是问题,中小公司可以用云平台直接提供的k8s能力,大公司也不用担心没人运维k8s的问题)
Service Mesh到规模落地时间可能还有2年左右的时间

业务代码开发为什么要关注服务治理的东西,微服务的东西? 这就是抽象成一层框架干的事情

作为phper未来还有机会么

诚然PHP在微服务时代被沦为了“前端”语言,写PHP的在大公司沦为“套模板”的。
在Java Spring Cloud 全家桶面前,phper是看着人家的工具库牛逼。
phper是否没机会了呢,php是否没机会了呢
仅仅是从语言角度讲,首先phper当然有机会,php也当然有机会,phper不要局限在php语言本身,js框架vue,Golang都是可以学习的目标
再次市面上还有大量的web站点只需要php就可以快速简单的达成,根本不需要服务化,什么微服务,老夫拿起php连上redis、mysql就是干,单体应用分分钟出活
phper不用担心没出路,php在web领域的优势、市场需求都会验证这一点

需要2年时间,Service Mesh在中大型公司一定会落地,小公司也会在云平台上找到落地的可能,php一样可以干微服务“后端”干的事!