目录:
大型网站系统与Java中间件实践(3)
大型网站系统与Java中间件实践(4)
4 服务框架
4.1 服务框架简述
随着业务的发展,系统从垂直架构演进为服务化架构,这个过程会遇到一些问题。服务框架就是为了解决这些问题的,如下图所示:
我们从服务调用者出发,看看服务框架的作用。服务调用者调用服务提供者的接口,由于服务提供者一般是以集群形式存在的,那么就需要进行路由寻址,选定某个服务提供者来处理调用请求,接着需要按照事先约定好的协议进行编码和通信。服务提供者接收到请求之后进行解码,并调用服务实现,返回结果。
简单点来说,服务框架实际上包含服务注册/发现和远程过程调用两部分功能。可参考另一篇文章——面向服务的体系架构。
4.2 实践优化之服务升级
服务落地之后,随着业务的发展,可能是需要对服务进行升级的。服务升级一般有两种情况,一种是接口不变,只对服务逻辑本身进行升级,这种情况比较简单就不说了。另外还有一种就是接口变更了,主要指接口参数变了,这种情况相对复杂。
服务升级带来的接口变化问题,本质上就是接口兼容问题。在不停机的情况下,接口的变更要充分考虑旧版本和新版本的不同参数。主要有几种应对方式:
- 服务提供方和服务调用方同时修改,同时发布。理论上可以,实际不好操作。比如某次升级服务接口,减少了一个调用参数。这次升级只对众多服务调用方中的其中一方有益,此时不可能要求所有的调用方都同时来修改调用入参。
- 通过版本号来解决,这是比较常用的方式。通过版本号来区分新旧服务,以此做不同的处理。
4.3 服务治理
为了保证线上系统的稳定运行,对服务进行治理是必须的。服务治理包含多个方面,大概可以分为服务查看和服务管理。
像阿里的Dubbo的后台管理界面,展示的内容就是最基本的服务治理的一些内容。上线一个服务后,这个服务是否正常,服务提供者的ip是多少,服务有哪些消费者等等,这些都属于服务查看。服务禁用,添加消费者黑名单等等,这些则属于服务管理。这些都是服务治理的最基本的内容,一般需要通过后台管理界面来提供相应功能。
实际上,服务治理的范畴是很广泛的,还包含很多其他方面。
-
服务质量
根据被调用服务的出错率、响应时间等数据对服务质量进行的评估。 -
服务容量
根据所提供服务的总能力以及当前所使用容量进行的评估,其中能力是指对于请求数量方面的支撑情况。 -
服务依赖
根据服务被调用以及服务调用其他服务的情况,给出服务于其他上下游服务的依赖关系,除了服务间定性的依赖关系外,还有定量的数据信息。 -
服务统计
服务运行时情况的统计,如调用次数和出错次数、出错率、响应时间。
另外还有服务报表,服务监控等内容。
从服务管理的角度看,以下内容是需要关注的:
-
服务上下线
控制服务的上下线,包括针对一个服务的所有机器的上线和下线操作,针对指定机器的上线和下线,DoubleCheck控制。 -
服务路由
对服务路由策略的管理。 -
服务限流降级
根据调用限流、根据具体服务限流、针对服务开关降级等等。