文章插图
一个网站就是一个应用,当系统压力较大时,只能横向扩展,增加多个服务器或者多个容器去做负载均衡,避免单点故障而影响到整个系统 。
集中式最明显的优点就是开发,测试,运维会比较方便,不用考虑复杂的分布式环境 。
弊端也很明显,系统大而复杂、不易扩展、难于维护,每次更新都必须更新所有的应用 。
文章插图
集中式系统拓扑图
鉴于集中式系统的种种弊端,促成了分布式系统的形成,分布式系统背后是由一系列的计算机组成,但用户感知不到背后的逻辑,就像访问单个计算机一样,天然的避免了单机故障的问题 。
应用可以按业务类型拆分成多个应用或服务,再按结构分成接口层、服务层 。
我们也可以按访问入口分,如移动端、PC 端等定义不同的接口应用 。数据库可以按业务类型拆分成多个实例,还可以对单表进行分库分表 。同时增加分布式缓存、消息队列、非关系型数据库、搜索等中间件 。
分布式系统虽好,但是增加了系统的复杂性,如分布式事务、分布式锁、分布式 Session、数据一致性等都是现在分布式系统中需要解决的难题 。
分布式系统也增加了开发测试运维的成本,工作量增加,其管理不好反而会变成一种负担 。
文章插图
分布式系统拓扑图
分布式系统最为核心的要属分布式服务框架,有了分布式服务框架,我们只需关注各自的业务,而无需去关注那些复杂的服务之间调用的过程 。
分布式服务框架
目前业界比较流行的分布式服务框架有:阿里的 Dubbo、Spring Cloud 。
这里不对这些分布式服务框架做对比,简单的说说他们都做了些什么,能使我们用远程服务就像调用本地服务那么简单高效 。
服务
服务是对使用用户有功能输出的模块,以技术框架作为基础,能实现用户的需求 。
比如日志记录服务、权限管理服务、后台服务、配置服务、缓存服务、存储服务、消息服务等,这些服务可以灵活的组合在一起,也可以独立运行 。
服务需要有接口,与系统进行对接 。面向服务的开发,应该是把服务拆分开发,把服务组合运行 。
更加直接的例子如:历史详情、留言板、评论、评级服务等 。他们之间能独立运行,也要能组合在一起作为一个整体 。
注册中心
注册中心对整个分布式系统起着最为核心的整合作用,支持对等集群,需要提供 CRUD 接口,支持订阅发布机制且可靠性要求非常之高,一般拿 Zookeeper 集群来做为注册中心 。
分布式环境中服务提供方的服务会在多台服务器上部署,每台服务器会向注册中心提供服务方标识、服务列表、地址、对应端口、序列化协议等信息 。
注册中心记录下服务和服务地址的映射关系,一般一个服务会对应多个地址,这个过程我们称之为服务发布或服务注册 。
服务调用方会根据服务方标识、服务列表从注册中心获取所需服务的信息(地址端口信息、序列化协议等),这些信息会缓存至本地 。
当服务需要调用其他服务时,直接在这里找到服务的地址,进行调用,这个过程我们称之为服务发现 。
文章插图
注册中心
下面是以 Zookeeper 作为注册中心的简单实现:
/***创建node节点*@paramnode*@paramdata*/publicbooleancreateNode(Stringnode,Stringdata){try{byte[]bytes=data.getBytes();//同步创建临时顺序节点Stringpath=zk.create(ZkConstant.ZK_RPC_DATA_PATH+"/"+node+"-",bytes,ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);log.info("createzookeepernode({}=>{})",path,data);}catch(KeeperExceptione){log.error("",e);returnfalse;}catch(InterruptedExceptionex){log.error("",ex);returnfalse;}returntrue;}
文章插图
子节点 1
推荐阅读
- 这一次,让你完全理解 HTTPS 到底是如何做到数据传输安全的
- 黑客是如何控制你手机的?出现这几种情况,你的手机可能已中招
- 经常练太极拳可以降低血糖是真的吗?
- 太极拳和阴阳五也行之间的关系是怎样的
- 你必须掌握的太极拳要领
- 太极拳居然有这功效 我震惊了
- 揭秘太极拳实战有什么作用
- 什么是掤劲 掤劲的训练方法
- 静功缠丝太极拳的创始人是谁
- 杨氏太极拳24式分别是什么