应用的一致性问题:在设计之初,就要避免这种问题。不是遇到才去想怎么修数据
5:架构设计的问题引发
阿里的单元化方案,不会出现跨机房的问题
读比较多,写比较少,微博
业务的妥协:业务的主键不是使用db的自增机制
读多写少,单点写,其它机房部署的db节点,只能是slave
多点接入机房提供服务
RabbitMQ是有ACK的
Kafka设计之初就是高吞吐量,是没有ACK的
kafka 也有ack=all ,消费也可以提交 offset
业务的特点,将重要的服务做高可用
开发成本、维护成本
双A(Available)机房:
即对服务来说双机房互备,即任意一个机房掉线(天朝内挖断电缆是随时随地发生的)服务依然可用。国内能公开号称自己有双A机房互备的,暂时我只听闻只有BTA,直接近距离听过公开演讲的是阿里与腾讯。但,也只是说到“有”的层次,底层上如何实现,使用什么技术等等,并没有透露。事实上,这些细节,足够以说上一整天,甚至好几天;并且真正参与其中实现的技术人员肯定非常多,也并不是一个人能说清楚。为什么这样说?双A不是你想上就能上阿。~
双A机房必备条件
钱钱钱。没钱你说个球,创业公司都把业务放到一个机房,甚至现在都使用云服务了。即使上了规模的IT公司,单一的业务也只是放在一个机房。
论一个机房可靠性.
假设不挖断电缆的前提。IDC机房还是比较可靠的。都有(BGP)多线路可选,带宽不够使?加加加。还有必需2个以上的UPS后备电源,机柜插槽都是走双线路,即服务器双电都插在不同供电源下。24小时人员值班不在话下。IDC内设备、如路由、交换机什么鬼的,都是给你最好,并且24小时视频监控,闲杂人一般进不去,要不是租用机柜公司授权,IDC值班人员也不能擅自打开机柜锁。所以基本上只要不挖断电缆,机房是可靠的。
业务需求。需求什么?
1)地域上高可用,就近访问;
2)防挖继电缆, 机房被炸。
要解决这两个问题的企业真不多,要不是用户量达到每天几千万级别的,并且全国(仍至全球)用户分布广,你压根不去想高可用这问题。国内网络运营商有多坑爹,不是经历过,你真不敢相信。使用帮你缓存HTTP GET请求的都是小事,DNS直接解释不出来,跃然劫持你域名这种事比较少,但人家敢做。数据链接走法:从广东到北京的,先让你走到新疆再回来也是有,别以为让你直接上京广线。
专线。机房互通不走专线,是等死。不解释了。PS:专线是要线的,很多钱。
双A怎么玩?
智能DNS。
这个是大杀器,全国运营端太多,各家都有自己DNS解释服务器,并且各厂在每个省市都有点。所以腾讯投DNSPosd,阿里收了万网,还有最近比较火的北京快网(Cloudxns),其它不列举了。
智能DNS就是要解决用户就近访问、域名解释、机房流量负载均衡这些问题。并且在机房瓜了后,能快速刷新全国DNS,把流量引导到可用机房。(说实话,好像没几个IT企业能做到机房瓜了后,切流量过程中与切流量后能正常的访问的。原因是切的瞬间,对另一机房流量冲击不一定撑得住,而流量过去后,业务本身是用双机房撑压力的,突然多50%压力过来,软硬件原本就要有富余才行。本身使用多机房业务当然可以)。由于智能DNS厂商一抓一大把,免费的、收费都有,用起来就行了。
机房数据同步才是难点。
走专线。
阿里有各种数据库迁移、同步(binlog式)、读写分离中间层等工具,都是开源的,在GitHub上能找到。但要运行起来并不易,还有个说法是开源版本与内部使用版本不一致(这个我信)。
迁移过程不能停业务,或只可能短暂停。
一般同步的都是DB。
以MySQL与KV数据库为例。我们业务使用的正是MySQL与Redis这两款db