随着社会的发展,技术的进步,以前的大型机架构由于高成本、难维护等原因渐渐地变得不再主流,替代它的就是当下最火的分布式架构。要说分布式架构有多重要,可以说如果你不了解“分布式”,那么你也无法真正了解云计算、大数据、人工智能等新兴技术。那么,新年第一期为大家带来的就是分布式服务框架方面的精华问答,让我们一起打开“分布式”的大门吧!
Q:分布式服务框架对于文件类的东西(图片)等是如何做同步或者如何部署的?
A:通常需要研发一个通用的RPC框架,它底层通信框架可以使用Netty,基于Netty的TCP/IP能力,可以向上封装应用层协议。由Netty向上生长出其它协议,可以参考基于Netty的相关应用层协议框架,也可以参考下 RestExpress 和Dubbo,两者维度不同。
Q:怎么考虑RPC和REST的选取呢,REST和微服务还是很容易混淆的?
A:1、RPC框架不等同于服务框架,典型的RPC框架如Avro、MessagePack、gRPC等;典型的服务框架如HSF、JSF、Dubbo等;2、Restufl协议与微服务没任何关系,只不过对外开放时,大部分微服务会发布成Restful协议。
Q:双机热备(多机热备)和分布式架构都可以起到灾备效果。他们的技术难点分别在哪里?都有哪些相同和不同的地方,如何选择?
A:双机热备等依赖双机软件、需要写双机脚本等,优点是本身对业务的侵入比较小。缺点就是对双开软件、浮动IP、共享存储等有强依赖。
分布式架构:强调对等集群、服务无状态,在这种架构下,任何单点故障都不会中断业务。缺点是:1、分布式架构对业务设计有一定约束,例如Session集中管理、服务无状态等;2、需要对分布式事务做处理,无论是强一致性还是弱一致性。
Q:通用的RPC框架。Netty和mina有如何做技术选型?请问Mina如何做集群?或者说类似有Socket长连接的如何做集群?
A:可以从架构、功能特性丰富度、成熟度、社区活跃度、学习成本等角度去选型,建议选择Netty。Mina是NIO框架,集群管理、会话管理等需要使用者自己封装。
Q:分布式系统部署的话,一个项目部署在多个节点上,那么数据库呢,是公用一个数据库,还是每个节点上都有数据库呢?一个项目部署在多个节点上,那么代码中的同步锁操作是不是就失效了呢?例如下单操作,某个物品只有一件了,但是多个用户分别访问了不同的节点服务器,那么任何处理才能保证同时访问不同节点的用户只能有一个用户能下单成功呢?
A:1、通常数据库集群是独立部署,如果量不大,做个读写分离数据库即可;如果数据量大,则做分库分表,可以参考 TDDL;2、是的。所以问题只要是集群部署都有这个问题,思路是锁可以放在数据库端,例如存储过程或者函数;也可以通过SQL操作利用数据库的行锁,例如Select for update;还有一种轻量级的锁方案,即利用CAS原理,做CompareAndSet。
Q:在实际操作过程中,分布式服务是如何支持多协议的?如果项目数据量比较大,在选择服务调用方式的时候,需要什么特别注意的地方吗?
A:支持多协议,有两种策略:1、利用Netty封装通用的NIO通信框架,在上面通过扩展CodeC做多协议支持;2、参考Dubbo的做法,抽象Portocol协议接口,集成不同协议的开源框架,实现多协议。 服务发布的时候,可以指定发布的协议。建议策略:1、通常时延较小、可控的,可以使用同步调用;2、时延不可控的,采用异步;3、多个服务接口无前后关系的,并行服务调用。
---------------- 完 --------------
1.微信群:
添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
2.征稿:
投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。
推荐阅读
程序员抢票姿势 ↓交朋友还能抢票?
为交流学习,请备注+姓名+公司职位(学校专业)
点击“阅读原文”,打开 CSDN App 阅读更贴心!