通信服务框架基础知识总结

简介: 成熟度:学习成本、难易程度、社区热度、文档是否详细、是否有专门团队维护更新、稳定性如何;

在软件系统组成越发复杂的今天,如何保证每个服务间的通信,是系统架构师必须考虑的重要一点。作为一名软件测试工程师,了解系统架构以及服务间的通信过程及原理,对我们开展测试工作有很大的帮助。这篇文章,简单介绍下常见的一些通信服务框架基础知识。。。


参考:《京东基础架构建设之路》


要组成一个基本的通信服务框架,最起码需要这三部分:


统一的RPC框架、服务注册中心、管理端。


一、RPC框架


RPC(Remote Procedure Call),即远程过程调用。


1、选择RPC框架的注意事项


①、代码规范:是否有基于某些标准协议的代码生成,还是无代码入侵;

②、通信协议:TCP/HTTP

③、序列化协议:是二进制还是文本格式,是否需要跨语言、性能如何;

④、I/O模型:是同步还是异步,是阻塞还是非阻塞模式;

⑤、负载均衡:负载均衡模式是客户端软负载、代理模式,还是服务端负载;


如果选型的框架为开源框架,还需要考虑以下几点:


①、成熟度:学习成本、难易程度、社区热度、文档是否详细、是否有专门团队维护更新、稳定性如何;

②、可扩展性:是否有SPI扩展,是否支持上下兼容;

③、跨语言:是否支持跨语言;

④、性能:作为基础服务,性能必须出色,否则服务框架本身会成为瓶颈;

 

2、开源框架对比表


640.jpg

 

3、选型建议


①、与前端交互:适合选择短连接、跨语言的框架,比如RESTful、gRPC;

②、纯粹的后台交互:适合选择长连接、序列化为二进制的框架,比如Thrift、Dubbo,这样相对更高效;

③、小型团队:如果是第一次使用,建议选择规范化的RPC框架,比如Thrift、RESTful、gRPC;

④、大型团队:大型团队一般已有大量业务代码,最好选择无代码入侵的框架,比如Dubbo、RESTful,否则改造成本将变得很大;

 

二、服务注册中心


注册中心相当于服务提供者和服务调用者之间的中间人,其提供服务注册、服务发现、服务状态检测等基础服务,在服务治理中的作用及其重要。


1、选型注意点


①、服务注册:接收注册信息的方式;

②、服务订阅:返回订阅信息的方式,push或者pull;

③、状态检测:检测服务端的存活状态;


如果选择开源的注册中心,则需要考虑如下几点:


①、成熟度:学习成本、社区热度、文档是否详细等;

②、维护成本:注册中心日常维护;

③、数据结构:能否快速定位结果,是否可以进行遍历筛选;

④、性能和稳定性:良好的性能和稳定性,是服务中心所必须具有的特质;

⑤、CAP原则:即数据一致性、服务可用性、分区容错性。只能三选二,要么选择CP(关注一致性),要么选择AP(服务可用性);

 

2、开源服务中心对比表


640.png

 

3、选型建议


①、规模小:建议选择CP,RPC框架可直接接入数据源;

②、规模大:建议选择AP,RPC框架不可以直接接入数据源;

③、跨机房/地域:尽量不要选强一致性协议的注册中心,因为跨机房跨地域本身带来的时延性会对数据一致性造成很大干扰;


PS:RPC框架必须具有注册中心不可用情况下的容灾策略,服务状态检测十分重要!!!

 

三、客户端


客户端即可视化管理的部分,可以通过web界面等方式,对服务提供者和调用者等相关信息进行可视化展示和管理操作。

比如常见的MQ(包括Active MQ、Scoket MQ和Rabbit MQ),都有可视化的管理界面,如下:


640.jpg

 

以上,即为通信服务框架基础知识的总结,仅供参考,更多内容,请自行探索。。。

相关文章
|
关系型数据库 MySQL Windows
windows安装mysql报错Remove of the Service Denied!
windows安装mysql报错Remove of the Service Denied!
300 0
|
测试技术
无法复现的bug,如何处理?
无法复现的bug,如何处理?
874 0
|
机器学习/深度学习 算法 数据挖掘
CogLTX:应用BERT处理长文本
CogLTX:应用BERT处理长文本
868 0
CogLTX:应用BERT处理长文本
|
8月前
|
域名解析 弹性计算 网络安全
CEN+私网NAT实现跨地域访问云服务需求-CEN企业版
本文介绍了如何通过企业版云企业网和私网NAT配置,实现ECS内网跨地域访问OSS资源的方法。该方法避免了跨地域配置云服务网段时可能出现的管控异常问题,适用于其他云服务如MQ等。
|
7月前
|
Java
Java 异常处理:11 个异常处理最佳实践
本文深入探讨了Java异常处理的最佳实践,包括早抛出晚捕获、只捕获可处理异常、不忽略异常、抛出具体异常、正确包装异常、记录或抛出异常但不同时执行、不在finally中抛出异常、避免用异常控制流程、使用模板方法减少重复代码、抛出与方法相关的异常及异常处理后清理资源等内容,旨在提升代码质量和可维护性。
436 3
|
监控 测试技术
【亮剑】理解CPU负载对服务器稳定性的重要性,并提供了诊断和解决CPU负载过高问题的步骤
【4月更文挑战第30天】本文阐述了理解CPU负载对服务器稳定性的重要性,并提供了诊断和解决CPU负载过高问题的步骤:1) 使用监控工具分析CPU使用率和系统负载;2) 深入排查运行队列、进程占用、系统调用和硬件状态;3) 根据排查结果进行代码优化、调整进程优先级或限制CPU使用率,必要时升级硬件。建议建立监控体系,定期性能测试,并持续优化以保证服务器高效运行。
381 1
|
SQL 存储 关系型数据库
MySQL中的数据备份与还原(导出导入)实践总结
MySQL中的数据备份与还原(导出导入)实践总结
788 1
|
11月前
|
前端开发 网络协议
Netty实战巅峰:从零构建高性能IM即时通讯系统,解锁并发通信新境界
【8月更文挑战第3天】Netty是一款高性能、异步事件驱动的网络框架,适用于开发高并发网络应用,如即时通讯(IM)系统。本文将指导你利用Netty从零构建高性能IM程序,介绍Netty基础及服务器/客户端设计。服务器端使用`ServerBootstrap`启动,客户端通过`Bootstrap`连接服务器。示例展示了简单的服务器启动过程。通过深入学习,可进一步实现用户认证等功能,打造出更完善的IM系统。
339 1
|
存储 关系型数据库 MySQL
MySQL 格式化日期函数 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 之间区别
MySQL 格式化日期函数 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 之间区别
330 1