分布式集群架构场景化解决⽅案
时小浅
折腾数据.折腾代码.折腾规约.折腾架构.折腾需求.折腾服务.生命不息.折腾不止.
展开
-
解决Session⼀致性的⽅案
Nginx的 IP_Hash 策略同⼀个客户端IP的请求都会被路由到同⼀个⽬标服务器,也叫做会话粘滞优点:配置简单,不⼊侵应⽤,不需要额外修改代码缺点:服务器重启Session丢失存在单点负载⾼的⻛险单点故障问题Session共享,Session集中存储Session的本质就是缓存,那Session数据为什么不交给专业的缓存中间件呢?⽐如Redis优点:能适应各种负载均衡策略服务器重启或者宕机不会造成Session丢失扩展能⼒强适合⼤集群数量使⽤缺点:对应⽤有⼊侵,引⼊了和原创 2020-08-10 08:50:30 · 112 阅读 · 0 评论 -
Elastic-Job 分布式调度框架
Elastic-Job介绍Elastic-Job是当当⽹开源的⼀个分布式调度解决⽅案,基于Quartz⼆次开发的,由两个相互独⽴的⼦项⽬Elastic-Job-Lite和Elastic-Job-Cloud组成。我们要学习的是 Elastic-Job-Lite,它定位为轻量级⽆中⼼化解决⽅案,使⽤Jar包的形式提供分布式任务的协调服务,⽽Elastic-Job-Cloud⼦项⽬需要结合Mesos以及Docker在云环境下使⽤。Elastic-Job的github地址:https://github.c原创 2020-08-10 08:48:26 · 102 阅读 · 0 评论 -
定时任务与消息队列的区别
共同点异步处理⽐如注册、下单事件应⽤解耦不管定时任务作业还是MQ都可以作为两个应⽤之间的⻮轮实现应⽤解耦,这个⻮轮可以中转数据,当然单体服务不需要考虑这些,服务拆分的时候往往都会考虑流量削峰双⼗⼀的时候,任务作业和MQ都可以⽤来扛流量,后端系统根据服务能⼒定时处理订单或者从MQ抓取订单抓取到⼀个订单到来事件的话触发处理,对于前端⽤户来说看到的结果是已经下单成功了,下单是不受任何影响的本质不同定时任务作业是时间驱动,⽽MQ是事件驱动;时间驱动是不可代替的,⽐如⾦融系统每⽇的利息结算,不原创 2020-08-10 08:43:35 · 3257 阅读 · 0 评论 -
SnowFlake 雪花算法
雪花算法是Twitter推出的⼀个⽤于⽣成分布式ID的策略。雪花算法是⼀个算法,基于这个算法可以⽣成ID,⽣成的ID是⼀个long型,那么在Java中⼀个long型是8个字节,算下来是64bit,如下是使⽤雪花算法⽣成的⼀个ID的⼆进制形式示意:/** * 官方推出,Scala编程语言来实现的 * Java前辈用Java语言实现了雪花算法 */public class IdWorker{ //下面两个每个5位,加起来就是10位的工作机器id private long work原创 2020-08-10 08:42:11 · 421 阅读 · 0 评论 -
常用的分布式ID解决⽅案
UUIDUUID 是指Universally Unique Identifier,翻译为中⽂是通⽤唯⼀识别码产⽣重复 UUID 并造成错误的情况⾮常低,是故⼤可不必考虑此问题。Java中得到⼀个UUID,可以使⽤java.util包提供的⽅法public class MyTest { public static void main(String[] args) { System.out.println(java.util.UUID.randomUUID().toString()); }}原创 2020-08-10 08:38:49 · 113 阅读 · 0 评论 -
集群时钟同步配置
集群时钟同步思路分布式集群中各个服务器节点都可以连接互联⽹思路:操作⽅式:#使⽤ ntpdate ⽹络时间同步命令ntpdate -u ntp.api.bz #从⼀个时间服务器同步时间windows有计划任务Linux也有定时任务,crond,可以使⽤linux的定时任务,每隔10分钟执⾏⼀次ntpdate命令分布式集群中某⼀个服务器节点可以访问互联⽹或者所有节点都不能够访问互联⽹X思路:操作⽅式:1)选取集群中的⼀个服务器节点A(172.17.0.17)作为时间服务器(整个集群原创 2020-08-10 08:34:07 · 281 阅读 · 0 评论 -
Nginx 配置⼀致性Hash负载均衡策略
ngx_http_upstream_consistent_hash 模块是⼀个负载均衡器,使⽤⼀个内部⼀致性hash算法来选择合适的后端节点。该模块可以根据配置参数采取不同的⽅式将请求均匀映射到后端机器,consistent_hash $remote_addr:可以根据客户端ip映射consistent_hash $request_uri:根据客户端请求的uri映射consistent_hash $args:根据客户端携带的参数进⾏映ngx_http_upstream_consistent_h原创 2020-08-10 08:31:23 · 156 阅读 · 0 评论 -
⼀致性Hash算法编码实现
⼀致性Hash算法 不含虚拟节点import java.util.SortedMap;import java.util.TreeMap;public class ConsistentHashNoVirtual { public static void main(String[] args) { //step1 初始化:把服务器节点IP的哈希值对应到哈希环上 // 定义服务器ip String[] tomcatServers = new String[]{"123.111.0.0","123.原创 2020-08-10 08:29:19 · 181 阅读 · 0 评论 -
⼀致性Hash算法
⼀致性哈希算法思路如下:⾸先有⼀条直线,直线开头和结尾分别定为为1和2的32次⽅减1,这相当于⼀个地址,对于这样⼀条线,弯过来构成⼀个圆环形成闭环,这样的⼀个圆环称为hash环。我们把服务器的ip或者主机名求hash值然后对应到hash环上,那么针对客户端⽤户,也根据它的ip进⾏hash求值,对应到环上某个位置,然后如何确定⼀个客户端路由到哪个服务器处理呢?按照顺时针⽅向找最近的服务器节点假如将服务器3下线,服务器3下线后,原来路由到3的客户端重新路由到服务器4,对于其他客户端没有影响只是这原创 2020-08-10 08:26:49 · 780 阅读 · 0 评论 -
Hash算法应⽤场景
Hash算法在分布式集群架构中的应⽤场景Hash算法在很多分布式集群产品中都有应⽤,⽐如分布式集群架构Redis、Hadoop、ElasticSearch,Mysql分库分表,Nginx负载均衡等主要的应⽤场景归纳起来两个请求的负载均衡(⽐如nginx的ip_hash策略)Nginx的IP_hash策略可以在客户端ip不变的情况下,将其发出的请求始终路由到同⼀个⽬标服务器上,实现会话粘滞,避免处理session共享问题如果没有IP_hash策略,那么如何实现会话粘滞?可以维护⼀张映射表,存储原创 2020-08-10 08:21:49 · 143 阅读 · 0 评论