免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 76677 | 回复: 9
打印 上一主题 下一主题

【有奖讨论】如何用分布式中间件技术提升Java企业级开发效率?(获奖名单公布啦) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2020-04-08 09:12 |只看该作者 |倒序浏览
本次活动获得《分布式中间件技术实战(Java版)》奖励的用户是:

@aloki
@wh7211
@LuckyMechanic
@电风扇三生三世
@renxiao2003


请以上5位用户,请于5月30日前以站内的形式联系管理员飘絮絮絮丶,如无法发站内请加微信:itpubwxt






话题背景:


      在如今微服务、分布式系统架构盛行的时代,大部分企业级应用系统或应用程序都面临着重构、升级的可能。在这个过程中,研发人员将成为其中的主力。而作为微服务、分布式系统架构必不可少的得力助手,“分布式中间件”将在其中充当重要的角色。作为一名Java软件工程师,掌握Spring Boot以及相关分布式中间件的使用将对自己重构、升级应用系统带来很大的帮助。与此同时,掌握Spring Boot以及分布式中间件的使用将逐渐成为个人综合能力的其中一个考量。近期机械工业出版社出版了《分布式中间件技术实战(Java版)》一书,是一本很实用的图书,本次活动便是以此为契机,和各位Java开发工程师或程序员就相关话题展开讨论,欢迎大家踊跃发言。

话题讨论:

(1)大家可以谈谈自己对“分布式中间件”的认识和理解,可以说一说自己所知晓的目前市面上比较流行、应用比较广泛的中间件有哪些。

(2)对于分布式系统架构的整体演进历程以及中间件的落地实施,读者朋友们认为中间件起到的主要作用是什么?还能承担起哪些职责?

(3)本书着重介绍了几款目前应用比较广泛的中间件:Redis、RabbitMQ、ZooKeeper和Redisson及其丰富的应用场景,大家可以分享还有哪些典型的应用场景?

(4)本书花了大篇幅的笔墨介绍了Redis的应用场景——抢红包系统的设计与开发,谈谈你对整体实现流程的理解以及还有哪些可以改进的地方?

活动时间:2020年4月8日-5月8日

本期奖品:最佳积极参与经验分享奖5名,奖励价值129元的《分布式中间件技术实战(Java版)》图书一本。

分布式中间件技术实战(Java版)
钟林森  编著
书号:978-7-111-64151-3
印张:28(共448页)
书脊:21mm
定价:119.00元
成品尺寸:186*240
上架建议:计算机/Java



购买链接:

京东:https://item.jd.com/12606805.html
当当:http://product.dangdang.com/28494456.html

内容简介:

    本书站在初学者的角度,介绍了几款比较流行的分布式中间件,带领读者从零开始一步一个脚印地学习Java企业级应用开发。书中在讲解必要的理论知识和应用场景后都给出了实际项目案例,可以提高读者的开发水平和项目实战能力。
本书共10章,分为3篇。第1篇开发工具准备,介绍了分布式系统架构的相关知识要点,包括其功能、作用及演进历程,并由此引出了分布式中间件的相关介绍。第2篇开发实战,全面介绍了目前在实际开发中应用比较广泛的几款Java中间件,包括缓存中间件Redis、消息中间件RabbitMQ、统一协调管理中间件ZooKeeper和综合中间件Redisson等,重点介绍了这几款中间件的基本概念、典型应用场景及相应的功能组件等。第3篇总结,对相关内容做了重点回顾与总结。值得一提的是,本书在介绍几款中间件的理论知识时,还以Spring Boot微服务框架作为奠基,整合了相关中间件之间的依赖,并结合作者的实际项目经验进行了代码实战。
本书特别适合中间件实践经验为零的开发者阅读;对于有一定Java应用开发经验的工程师而言,通过阅读本书可以了解中间件在构建企业级应用过程中所提供的思路和解决方案;IT培训机构的学员,也可以通过本书系统地学习中间件技术。

图书试读: 前言 目录.pdf (4.16 MB, 下载次数: 118) 第1-2章.pdf (8.96 MB, 下载次数: 85) 第3章.pdf (12.41 MB, 下载次数: 154)




论坛徽章:
0
2 [报告]
发表于 2020-04-08 09:14 |只看该作者
欢迎大家踊跃参与活动哦~

论坛徽章:
0
3 [报告]
发表于 2020-04-08 18:10 |只看该作者
我也先来冒个泡,大家积极参加哦!书很香哦!

论坛徽章:
43
15-16赛季CBA联赛之上海
日期:2020-11-04 09:36:5515-16赛季CBA联赛之北控
日期:2018-10-29 18:20:3415-16赛季CBA联赛之北京
日期:2018-10-06 21:39:5715-16赛季CBA联赛之天津
日期:2018-08-09 10:30:41ChinaUnix元老
日期:2018-08-03 17:26:00黑曼巴
日期:2018-07-13 09:53:5415-16赛季CBA联赛之吉林
日期:2018-03-30 12:58:4315-16赛季CBA联赛之佛山
日期:2017-12-01 10:26:3815-16赛季CBA联赛之上海
日期:2017-11-14 09:20:5015-16赛季CBA联赛之江苏
日期:2019-02-20 09:53:3319周年集字徽章-庆
日期:2019-08-27 13:23:2515-16赛季CBA联赛之广夏
日期:2019-09-03 18:29:06
4 [报告]
发表于 2020-04-09 17:31 |只看该作者
(1)大家可以谈谈自己对“分布式中间件”的认识和理解,可以说一说自己所知晓的目前市面上比较流行、应用比较广泛的中间件有哪些。

以前没听过这个名词,看文档中描述,知道是分布式架构中用到的软件。除了下面写的这几个,我想nginx,kafka也应该算是。

(2)对于分布式系统架构的整体演进历程以及中间件的落地实施,读者朋友们认为中间件起到的主要作用是什么?还能承担起哪些职责?
中间件主要起到 分布式服务的协调,管理,消息的传递。


(3)本书着重介绍了几款目前应用比较广泛的中间件:Redis、RabbitMQ、ZooKeeper和Redisson及其丰富的应用场景,大家可以分享还有哪些典型的应用场景?
应用系统的session共享,分布式事务的管理,数据库的分库,分表。


(4)本书花了大篇幅的笔墨介绍了Redis的应用场景——抢红包系统的设计与开发,谈谈你对整体实现流程的理解以及还有哪些可以改进的地方?
抢红包系统网上看过大概的实现方案。觉得技术上已经很成熟了。通过将无序的访问转为有序的排队处理。

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

论坛徽章:
8
2017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之天津
日期:2019-06-20 14:25:4015-16赛季CBA联赛之天津
日期:2019-08-20 23:06:5319周年集字徽章-庆
日期:2019-08-27 13:24:4219周年集字徽章-19
日期:2019-09-06 18:55:5019周年集字徽章-年
日期:2019-09-06 18:55:5019周年集字徽章-周
日期:2019-09-20 17:18:2220周年集字徽章-CU
日期:2020-11-11 13:06:03
5 [报告]
发表于 2020-04-10 23:49 |只看该作者
(1)大家可以谈谈自己对“分布式中间件”的认识和理解,可以说一说自己所知晓的目前市面上比较流行、应用比较广泛的中间件有哪些。
顾名思义,中间件处于操作系统软件与用户的应用软件的中间,因此,中间件具有很好的独立性,可作为一个独立的软件系统运转。随着互联网的飞速发展,高吞吐、高并发、低延迟和负载均衡已成为普遍需求,为此,作为枢纽的中间件也从“集中式”发展为“分布式”。目前市面上比较流行、应用比较广泛的中间件有基于Redis的分布式缓存、基于Kafka的分布式消息队列、基于ZooKeeper的分布式锁等等。另外随着“云时代”的到来,作为通用软件的中间件再次华丽转身,阿里云、腾讯云、华为云都竞相推出了“云中间件服务”——如TencentDB for Redis、消息队列CMQ、云数据库Redis等等。

(2)对于分布式系统架构的整体演进历程以及中间件的落地实施,读者朋友们认为中间件起到的主要作用是什么?还能承担起哪些职责?
中间件起到的主要作用是将具体业务和底层逻辑解耦。需要利用服务的人(前端写业务的),不需要知道底层逻辑(提供服务的)的具体实现,只要拿着中间件结果来用就好了。中间件可实现缓存、消息队列、锁以及负载均衡等。


(3)本书着重介绍了几款目前应用比较广泛的中间件:Redis、RabbitMQ、ZooKeeper和Redisson及其丰富的应用场景,大家可以分享还有哪些典型的应用场景?
中间件典型的应用场景还有前面第一问题提到的基于Kafka的分布式消息队列、“云中间件服务”——如 TencentDB for Redis、消息队列CMQ、云数据库Redis等等

(4)本书花了大篇幅的笔墨介绍了Redis的应用场景——抢红包系统的设计与开发,谈谈你对整体实现流程的理解以及还有哪些可以改进的地方?
抢红包的场景有点像秒杀,但是要比秒杀简单点。因为秒杀通常要和库存相关。而抢红包则可以允许有些红包没有被抢到,因为发红包的人不会有损失,没抢完的钱再退回给发红包的人即可。至于这个系统有哪些要改进的地方,则需要积累经验去对服务做持续的优化,并且相关的配套环境要经过实际运行检验,缺少参考指标,系统的薄弱环节还待发现。

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
6 [报告]
发表于 2020-04-18 23:37 |只看该作者
本帖最后由 wh7211 于 2020-04-20 14:38 编辑

(1)大家可以谈谈自己对“分布式中间件”的认识和理解,可以说一说自己所知晓的目前市面上比较流行、应用比较广泛的中间件有哪些。

分布式中间件是具备网络通信功能的、基于分布式处理的软件,是位于硬件、操作系统、网络和数据库之上,应用软件之下的服务。

目前市面上比较流行、应用比较广泛的中间件有数据库中间件Cobar、MyCAT、MySQL Router,基于内存的存储中间件Redis,消息队列中间件RabbitMQ,分布式应用程序协调服务ZooKeeper,Redis提供的一种分布锁的实现Redisson。

(2)对于分布式系统架构的整体演进历程以及中间件的落地实施,读者朋友们认为中间件起到的主要作用是什么?还能承担起哪些职责?

分布式系统架构最初是两层架构,下层是服务端,上层是客户端,比如,服务端部署存放业务数据的数据库,客户端实现业务功能,分布式系统运行时,多个客户端同时访问服务端获取数据。随着业务的发展,为了满足业务逻辑复杂化、跨平台移植、大数据安全、下层服务端软硬件更新换代等需求,分布式系统架构引入了中间件技术和服务,变成了三层架构,下层是服务端,中层是中间件,上层是客户端,中间件在提高分布式系统开发和维护效率、系统性能和安全性,降低总体运维成本等方面起到了关键作用。

中间件还可以与互联网上的计算资源和数据资源进行简单、高效及低成本的集成,进而承担起为组织提高开发、运营效率和降低运维成本的职责。

(3)本书着重介绍了几款目前应用比较广泛的中间件:Redis、RabbitMQ、ZooKeeper和Redisson及其丰富的应用场景,大家可以分享还有哪些典型的应用场景?

消息中间件在用户注册流程中的应用场景:

如果不使用消息中间件,注册信息成功写入数据库后,给用户发送注册短信和注册邮件,任务完成后返回给客户端,用户响应时间长;如果使用消息中间件,注册信息成功写入数据库后,无需创建发送短信和发送邮件的线程,而是直接发送消息给消息中间件,成功发送后直接返回给客户端,然后短信服务和邮件服务异步读取消息中间件中的消息,并完成各自的任务,用户响应时间短。

(4)本书花了大篇幅的笔墨介绍了Redis的应用场景——抢红包系统的设计与开发,谈谈你对整体实现流程的理解以及还有哪些可以改进的地方?

抢红包的实现流程类似于电商系统的“秒杀”和“定时抢购”,关键是要解决高并发的问题。如果使用数据库,一旦出现执行大量SQL或大量线程被阻塞等问题,就会引发数据库性能瓶颈。建议使用redis集群做高并发业务,提高系统的性能,提供系统的高可用性保障。

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2020-04-23 15:22:06
7 [报告]
发表于 2020-04-19 20:15 |只看该作者
(1)大家可以谈谈自己对“分布式中间件”的认识和理解,可以说一说自己所知晓的目前市面上比较流行、应用比较广泛的中间件有哪些。
在分布式系统中,中间件是非常重要的组成,具有较高的技术门槛。随着互联网的飞速发展,高吞吐、高并发、低延迟和负载均衡已成为普遍需求,为此,作为枢纽的中间件也从“集中式”发展为“分布式”。
目前市面上比较流行、应用比较广泛的中间件有Redis、Kafka、ZooKeeper、Etcd、RabbitMQ、Nginx

(2)对于分布式系统架构的整体演进历程以及中间件的落地实施,读者朋友们认为中间件起到的主要作用是什么?还能承担起哪些职责?
中间件起到的主要作用是实现缓存、消息队列、锁以及负载均衡等。中间件是基础软件的一大类,属于可复用软件的范畴,顾名思义,中间件处于操作系统软件与用户的应用软件的中间,因此,中间件具有很好的独立性,可作为一个独立的软件系统运转。

(3)本书着重介绍了几款目前应用比较广泛的中间件:Redis、RabbitMQ、ZooKeeper和Redisson及其丰富的应用场景,大家可以分享还有哪些典型的应用场景?
基于 Redis 的分布式缓存、基于 Kafka 的分布式消息队列、基于 ZooKeeper 的分布式锁等,没有一种方案可以打遍全场,在中间件选型和方案设计的时候,需结合性能需求、开发成本、可扩展性、可维护性等进行综合评估。例如:基于 ZooKeeper 实现分布式锁的方案非常成熟,参考资料详实,但它并不一定适合你的应用场景。

(4)本书花了大篇幅的笔墨介绍了Redis的应用场景——抢红包系统的设计与开发,谈谈你对整体实现流程的理解以及还有哪些可以改进的地方?
redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
我认为如果没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。

评分

参与人数 1可用积分 +20 收起 理由
飘絮絮絮丶 + 20 赞一个!

查看全部评分

论坛徽章:
0
8 [报告]
发表于 2020-04-26 12:00 |只看该作者
大家要踊跃参与活动哦~~

论坛徽章:
0
9 [报告]
发表于 2020-04-28 21:42 |只看该作者
本帖最后由 电风扇三生三世 于 2020-04-28 21:43 编辑

(1)大家可以谈谈自己对“分布式中间件”的认识和理解,可以说一说自己所知晓的目前市面上比较流行、应用比较广泛的中间件有哪些。

面向对象中间件又称分布对象中间件,是分布式计算技术和面向对象技术发展的结合,简称对象中间件。分布对象模型是面向对象模型在分布异构环境下的自然拓广。面向对象中间件给应用层提供过重不同形式的通信服务,通过这些服务,上层应用对事务处理、分布式数据访问,对象管理等处理更简单易行。OMG组织是分布对象技术标准化方面的国际组织,它制定出了CORBA等标准。

(2)对于分布式系统架构的整体演进历程以及中间件的落地实施,读者朋友们认为中间件起到的主要作用是什么?还能承担起哪些职责?

中间件是独立的系统级软件,连接操作系统层和应用程序层,将不同操作系统提供应用的接口标准化,协议统一化,屏蔽具体操作的细节,布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。从进程角度看,两个程序分别运行在两台计算机上,它们相互协作完成同一个服务(或者功能),从理论上讲,这两个程序所组成的系统,就可以称作是“分布式系统”。

(3)本书着重介绍了几款目前应用比较广泛的中间件:Redis、RabbitMQ、ZooKeeper和Redisson及其丰富的应用场景,大家可以分享还有哪些典型的应用场景?

(1)通信支持
中间件为其所支持的应用软件提供平台化的运行环境,该环境屏蔽底层通信之间的接口差异,实现互操作,
所以通信支持是中间件一个最基本的功能。早期应用与分布式的中间件交互主要的通信方式为远程调用和消息两种方式。通信模块中,远程调用通过网络进行通信,通过支持数据的转换和通信服务,从而屏蔽不同的操作系统和网络协议。远程调用是提供给予过程的服务访问,为上层系统只提供非常简单的编程接口或过程调用模型。消息提供异步交互的机制。
(2)应用支持
中间件的目的就是服务上层应用,提供应用层不同服务之间的互操作机制。它为上层应用开发提供统一的平台和运行环境,并封装不同操作系统提供API接口,向应用提供统一的标准接口,使应用的开发和运行与操作系统无关,实现其独立性。中间件松耦合的结构,标准的封装服务和接口,有效的互操作机制,从而给应用结构化和开发方法提供有力的支持。
(3)公共服务
公共服务是对应用软件**性功能或约束的提取。将这些共性的功能或者约束分类实现,并支持复用,作为公共服务,提供给应用程序使用。通过提供标准、统一的公共服务,可减少上层应用的开发工作量,缩短应用的开发时间,并有助于提供应用软件的质量。


(4)本书花了大篇幅的笔墨介绍了Redis的应用场景——抢红包系统的设计与开发,谈谈你对整体实现流程的理解以及还有哪些可以改进的地方?

由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另外结合expire,我们可以设置过期时间然后再进行缓存更新操作,这个功能最为常见,我们几乎所有的项目都有所运用。

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
10 [报告]
发表于 2020-04-29 21:49 |只看该作者
本帖最后由 renxiao2003 于 2020-04-29 22:00 编辑

(1)大家可以谈谈自己对“分布式中间件”的认识和理解,可以说一说自己所知晓的目前市面上比较流行、应用比较广泛的中间件有哪些。

(2)对于分布式系统架构的整体演进历程以及中间件的落地实施,读者朋友们认为中间件起到的主要作用是什么?还能承担起哪些职责?

(1)通信支持

中间件为其所支持的应用软件提供平台化的运行环境,该环境屏蔽底层通信之间的接口差异,实现互操作,所以通信支持是中间件一个最基本的功能。早期应用与分布式的中间件交互主要的通信方式为远程调用和消息两种方式。

通信模块中,远程调用通过网络进行通信,通过支持数据的转换和通信服务,从而屏蔽不同的操作系统和网络协议。远程调用是提供给予过程的服务访问,为上层系统只提供非常简单的编程接口或过程调用模型。消息提供异步交互的机制。

(2)应用支e79fa5e98193e59b9ee7ad9431333431363665持

中间件的目的就是服务上层应用,提供应用层不同服务之间的互操作机制。它为上层应用开发提供统一的平台和运行环境,并封装不同操作系统提供API接口,向应用提供统一的标准接口,使应用的开发和运行与操作系统无关,实现其独立性。

中间件松耦合的结构,标准的封装服务和接口,有效的互操作机制,从而给应用结构化和开发方法提供有力的支持。

(3)公共服务

公共服务是对应用软件**性功能或约束的提取。将这些共性的功能或者约束分类实现,并支持复用,作为公共服务,提供给应用程序使用。通过提供标准、统一的公共服务,可减少上层应用的开发工作量,缩短应用的开发时间,并有助于提供应用软件的质量。


(3)本书着重介绍了几款目前应用比较广泛的中间件:Redis、RabbitMQ、ZooKeeper和Redisson及其丰富的应用场景,大家可以分享还有哪些典型的应用场景?一、Redis

1)、Redis高并发与快速响应原因

redis纯内存,读写速度特别块
redis单线程,避免线程切换和静态消耗
redis使用IO多路复用技术,可以处理并发连接
2)、IO多路技术

单个线程通过跟踪记录每一个I/O流的状态来同时管理多个I/O流。主要实现技术有三种select、poll、epoll。epoll中有三个方法:

当执行epoll_create时,创建了红黑树和就绪列表;
当执行epoll_ctl时,若增加socket包炳,则检查红黑树是否存在,存在则立即返回,不存在添加红黑树。然后向内核注册回调函数,用于中断事件来临时向准备就绪列表中插入数据;
当执行epoll_wait时,立即返回准备就绪列表中的数据。
二、RabbitMQ

消息生产者生产的消息通过交换器被绑定到对应的队列中去,消息消费者通过信道消费消息队列中的消息。

1)、交换器有四种类型:

Direct键:如果路由键完全匹配,消息就被投递到相应的队列
Fanout广播分发:如果交换器收到消息,将会广播到所有绑定的队列上
topic模式匹配:可以使来自不同源头的消息通过匹配规则能够到达同一个队列
headers:不常用,与Direct一致,匹配AMQP消息的header。
2)、消息生产者如何确认消息被正确发送到队列

将信道设置为confirm模式,所有发送到信道的消息都会生成一个唯一确定的ID
一旦消息被发送到目的队列或者消息被持久化,那么就会给消息生产者发送一个确认
若RabbitMQ内部错误导致消息丢失,会发送一条未确认通知给消息生成者
3)、消息消费者如何确认接收了消息

消费者没接收一条消息,都必须进行确认。只有消费者确认了消息,RabbitMQ才会从队列中删除消息。

4)、如何避免消息重复投递或重复消费

消息生产时,MQ针对每一条消息都会生成一个唯一确定的ID,作为去重和幂等性依据
消息消费时,每一个消息体都必须要有一个全局业务唯一ID,作为去重和幂等性依据
三、Zookeeper

Zookeeper集群是一个基于主从复制的高可用集群,有三种角色:

leader:所有写操作必须通过leader完成再由leader将写操作广播给其他服务器。只要有超过半数节点写入成功,该写请求就会被提交
follower:follower可直接处理并返回客户端的读请求。同时会将写请求转发给leader处理。并且负责在leader处理写请求时对请求进行投票。
observer:不参与投票,可接收客户端的连接,并将写请求转发给leader节点
1)、工作原理(原子广播)

Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在leader崩溃后,Zab就进入了恢复模式,当leader被选举出来,且大多数server完成了和leader的状态同步之后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。
为了保证事务一致性,zk采取了递增的事务id号(zxid)标识事务。所有提议都被加上了zxid。zxid由64位组成,高32位用来标识leader变化,低32位用来递增。
2)、投票机制

每个server启动以后都询问其他server投票给谁,对于其他server的询问,server会根据自身状态回复自己推荐的leader的id和上一次处理事务的zxid。(系统启动时,每个server都会推荐自己)
收到所有server后,计算出zxid最大的那个server,并将下一次投票server信息设置为它
计算获得票数最多的server为获胜者。超过半数,则被选为leader。否则,继续这个过程。
leader开始等待server连接。
follower连接leader,将最大的zxid发送给leader。
leader根据follerer的zxid确定同步点,至此选举结束。
选举阶段完成leader同步后通知folloer已经称为update状态。
follower收到update消息后,可以重新连接client的请求进行服务。


(4)本书花了大篇幅的笔墨介绍了Redis的应用场景——抢红包系统的设计与开发,谈谈你对整体实现流程的理解以及还有哪些可以改进的地方?

1、修改stop-writes-on-bgsave-error为no
当前配置为yes,分别修改redis.conf和当前实例
#redis.conf
stop-writes-on-bgsave-error no

#登陆redis执行
config set stop-writes-on-bgsave-error no
查看
config get stop-writes-on-bgsave-error

此参数设置为no,可以避免MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk。

2、开启appendonly
当前配置为appendonly no,即禁用了appendonly功能,这样的风险是一旦redis实例crash,重启后只能恢复到最近1次快照(即bgsave产生的rdb文件),可能会丢失很长时间的数据。
appendonly可以实现准实时刷盘,默认每1s将数据追加到磁盘文件,也可以配置成每次修改都刷盘,当redis crash时最大限度的保证数据完整性。

修改redis.conf和当前实例
#redis.conf
appendonly yes
appendfsync everysec

#登陆redis执行
config set appendonly yes
config get appendonly


同时需要设置no-appendfsync-on-rewrite yes


这两个参数可以确保redis每1分钟刷盘一次,也可以设置appendfsync always,即每次写都实时刷盘,避免redis crash造成数据丢失


3、添加最大内存阈值maxmemory
此参数限制redis可以占有的最大内存,一旦超出便淘汰过期key,可以避免因内存不足触发OOM。
这个参数和实际部署环境有关,要根据实际情况指定参数值,比如3G或者4G。

参考配置
maxmemory 3G
maxmemory-policy volatile-lru
maxmemory-samples 5

此参数可以避免redis过度占用机器内存,避免因内存不足导致的各种错误




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP