Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践

引言

微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。

微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。

微服务架构服务订阅发布机制与零侵入系统实践

服务化实践-零侵入

实际上,完全的零侵入很难做到,即使是声明式配置,配置本身也是代码的一部分,只不过相比于代码类库依赖,它不是编译器依赖。

一种好的做法是,服务的发布和消费通过声明式或者注解的方式,而不是直接调用服务框架的接口,例如Thrift。客户端需要调用Thrift提供的类库访问服务端,这就是代码API级的依赖,对业务代码侵入比较大。

Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践_第1张图片

一种比较成熟的实践是 利用Spring的扩展机制,通过XML的方式实现服务的发布和消费。

服务化实践-容错和路由

单体应用服务化之后,通常采用分布式集群的部署模式。

这会带来两个问题:

服务如何路由;

远端服务访问失败之后,如果进行容错。

大部分的容错和路由策略可以抽象到分布式服务框架中,通过策略配置的方式提供给用户使用,降低用户的开发成本。

从业务扩展性角度看,服务框架通常会提供扩展点,供业务做路由和容错定制。例如,业务希望根据手机号码和地市进行路由:

Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践_第2张图片

服务化实践-本地短路策略

在电信行业中,小机还是很普遍,应用通常会合设,例如服务提供者和消费者部署到同一台主机上。

为了提升性能,降低时延,往往会提供本地短路策略,具体策略如下:

Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践_第3张图片

服务化实践-多样化调用方式

服务的调用方式,主要有三种:同步服务调用、异步服务调用、并行服务调用。最常用、简单的就是同步服务调用。

Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践_第4张图片

异步服务调用的工作原理如下:

Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践_第5张图片

详细步骤如下:

消费者调用服务端发布的接口,接口调用由分布式服务框架包装成动态代理,发起远程服务调用;

通信框架异步发送请求消息,如果没有发生I/O异常,返回;

请求消息发送成功后,I/O线程构造Future对象,设置到RPC上下文中;

用户线程通过RPC上下文获取Future对象;

构造Listener对象,将其添加到Future中,用于服务端应答异步回调通知;

用户线程返回,不阻塞等待应答;

服务端返回应答消息,通信框架负责反序列化等;

I/O线程将应答设置到Future对象的操作结果中;

Future对象扫描注册的监听器列表,循环调用监听器的operationComplete方法,将结果通知给监听器,监听器获取到结果之后,继续后续业务逻辑的执行,异步服务调用结束。

并行服务调用,目的是为了提升服务调用的并行度,降低E2E时延。

Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践_第6张图片
Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践_第7张图片

总结

以 上就是我对Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践的技术问题 及其优化总结,分享给大家,希望大家知道什么是JJava大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践问题及其优化。觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持!

1、多写多敲代码,好的代码与扎实的基础知识一定是实践出来的

2、可以去百度搜索腾讯课堂图灵学院的视频来学习一下java架构实战案例,还挺不错的。

最后,每一位读到这里的网友,感谢你们能耐心地看完。希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步。

3丶想了解学习以上课程内容可加群:569068099验证码:(06 必过)

你可能感兴趣的:(Java大型互联网架构-微服务架构服务订阅发布机制与零侵入系统实践)