理解 Service Mesh

现今有了 Kubernetes 这类微服务编排工具后,微服务这项架构引得越来越多的企业使用. 虽然微服务之间都是相互独立,可以做到互不影响,但是随着量级的增加,微服务的管理将会越加趋于复杂,于此之下衍生微服务的治理问题是亟待解决的. 关注 Kubernetes 的人可能发现在一些 Kubernetes 交流社区已经悄然兴起了一些微服务治理的手段和工具,而其中最常见的一个词应该是Service Mesh. 这个词的流行是来自 Linkerd 公司的工具 Linkerd ,这是 Service Mesh 技术的具体实现,当然也有其他的工具实现 Service Mesh,比如最近火热的 Istio. 它们都是基于服务网格的设计实现,核心是一个透明代理,用以提供底层服务间的通信.因为处于通信底层,所以可以供上层实现: 服务发现 负载均衡 路由 限流 熔断 错误应答规则 超时重试 既可以实现功能而无需入侵服务内部,这无疑大大降低了微服务治理的门槛. 以 Kubernetes 下的 Istio 为例,其在部署后,会在创建的 … “理解 Service Mesh”

Read More

微服务的结构分层

微服务架构 在容器技术大火的当下,将后台的应用微服务化,无疑是最优的选择,但微服务化并不是简简单单就能实现的. 微服务的概念是通过对应用功能的解耦.在明确各自的作用,将其分散到各自独立的运行环境中. 早期服务程序大都是单体的,它会囊括多种功能,这在编写代码,调试程序时都是比较耗时耗力的,并且一个功能庞大的单体服务程序,只要某个环节出现了问题,则会较大概率的导致整体的崩溃. 而当将这些功能打散后,规模和体积将会变得更加轻量化,代码编写只需完成其单一场景的作用,调试必将将会变得简单,而在编译/打包/部署等环节都会节约不少时间,这将大大的提高开发的效率. 从当下主流的微服务架构来说,首先会依据功能划分出Service Gateway,来自用户的 Request 到达后,这些网关负责鉴权与路由.通过验证的请求,会被该网关转发到内部的实际的某个微服务中去,而后此微服务完成功能后应答网关,网关再回应用户.这整个流程应该是异步的,尽量避免因某个环节导致整体的阻塞. 服务间调用 在将服务拆分后,会导致一个问题,那就是服务间复杂的依赖关系.比如现在最火的 SOA 型的微服务架构也是如此. 当将一个单体应用拆分开后,不可避免的需要于服务间进行一些数据共享,而共享方式则就是服务间调用. 基于此,微服务之间也必须要有明确的划分界限:哪下服务应该是对外的,哪些微服务又该是对内的? 比如在线好友的查询服务网关中,对外的服务很好确认,而对内的微服务相对较难界定.可以将专门查询好友数据的功能单一实现,通过统一的API,去查询好友数量,好友资料,好友在线状态等. 而有些时候,微服务间可能会出现数据互相依赖的现象,即服务A调用服务B去完成某项功能时,服务B在运行中又可能需要调用A的接口获取数据,这将会导致微服务间层级错落的现象,此时应该尽量将相互依赖的功能划分独立出来,否则在后来可能越来越背离微服务的架构旨意.

Read More