yxhcquedu's starred repositories
ExamplesOfDesignPatterns
设计模式的总结与例子(有XMind,Uml图和详细代码实现说明)
Head-First-Design-Patterns
Code for Head First Design Patterns book (2020)
java-design-patterns
Design patterns implemented in Java
spring-boot-dubbo-mongo-mybatis-kafka-liquibase
spring boot 集成各种中间件
netty-demo
学习netty时的一些demo,学习书籍netty权威指南,以及自己实现的基于netty的私有协议栈
netty-protocol
基于netty的一个私有协议栈
netty-chat
使用Netty实现IMServer,支持Tcp和WebSocket实现。
netty-websocket
a fully-functioning websocket server built on netty.
netty-socketio
Socket.IO server implemented on Java. Realtime java framework
netty-4-user-guide-demos
Netty demos. (Netty 案例大全)
netty-restful-server
A light restful server built on netty. If you are preparing for leaning java or netty, it's a nice gift for you.
tcc-transaction
tcc-transaction是TCC型事务java实现
alibaba-mom
2015 ali中间件比赛项目,1. 通信模块: 涉及到了消息架构设计,每一个主题分配1-2个队列,这个是可以横向增加,考虑到了一个主题有多个消费者订阅,而且还有过滤条件,为了负载均衡,对应的队列投递消息是根据随机数对队列数取膜完成的。以上是内存队列。 2. 持久化系统:因为考虑到机器坏掉,broker不可用等等原因导致的消息丢失,就需要每次收到的消息必须及时落盘,这个就是比赛优化的重中之重。为此设计了一个小型的文件系统,借鉴阿里的rocketmq. 用一个大的日志文件,一般1G大小每个,和内存队列的结构映射到实体队列。整个日志文件是顺序文件,每条消息固定大小,里面有对应的队列号,消息号,还有长度等等。这个方便恢复消息到实体队列用的。 同步刷盘,异步刷盘,持久化必须可靠,所以一般是同步刷盘到日志文件,日志文件定时异步刷盘到实体队列,实体队列里面是索引,消息的本体在日志文件里面。为了加快大面积的写入速度,用了内存映射:内存映射文件首先将外存上的文件映射到内存中的一块连续区域,被当成一个字节数组进行处理,读写操作直接对内存进行操作,而后再将内存区域重新映射到外存文件,这就节省了中间频繁的对外存进行读写的时间,大大降低了读写时间
clover
clover 1、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能 2、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数据信息,如果超过指定时间没有收到最新的数据包,那么任务server端或者client端死掉了,此时要删除该server或client端节点,发邮件通知相关人员,记录异常日志到系统日志文件和MongoDB中 3、client端接受创建job请求,将job信息创建到client服务端,并根据job时间规则运行,并将任务信息存储到MongoDB中 4、当client端job运行时候,封装执行任务信息,发送到指定客户端机器,更新client端job执行时间和状态,如不在需要继续运行,那删除job并从MongoDB中删除相关任务信息 5、client端接受删除job请求,client服务端,立即执行删除job并将任务信息从MongoDB中删除 6、client端接受更新job请求,client服务端,立即执行删除job并创建新job,并将任务信息从MongoDB中删除,然后再存储新job信息 7、第一版 使用Netty做消息通讯中间件,存储消息放入Redis中,服务器开启Http请求,客户端 通过 发送Http请求到服务器来处理请求,由于任务太多 redis处理能力不行,放弃该方案 第二版 使用Netty RPC框架,自己开发一个Server端和Client,各种启动指定端口,由于 必须要求Server端和Client必须启动才能进行消息发送,所以感觉非常不灵活,因为放弃该方案 第三版 使用架构组推荐的rocketmq,通过使用发现,很严重问题,消息会重复发送,经常会收到重复的消息,在测试的时候发现,经常发生消息异常和报错,跟架构组刘婷峰沟通说,可能是机器性能不行了,他也不知道具体原因,感觉非常不靠谱,果断放弃 第四版 使用 zeromq,通过在网上查资料,对比各种mq后,发现zeromq是最轻量级,出现消息是最快的,经过测试完全能满足业务,果断使用 8、由于项目中使用zk,自己开发zk使用工具类,定制server端增删改查zk消息以及定制client端增删改查zk消息,功能测试zk,目前打算增加zk watch功能 9、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能 10、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数据信息,如果超过指定时间没有收到最新的数据包,那么任务server端或者client端死掉了,此时要删除该server或client端节点,发邮件通知相关人员,记录异常日志到系统日志文件和MongoDB中 11、开发console控制台管理,可以查看任务动态运行状态和次数信息 12、zk管理页面,查看server和client端节点信息,更新和删除节点信息 13、job管理页面,查看job详细信息 14、联系人管理页面,增删改查联系人信息 15、log日志管理页面,根据系统报错记录的日志信息,在页面中可以详细查看
Foundation
互联网架构 SOA(Dubbo)+配置中心(ZK)+消息中间件MQ(RocketMq)+高速缓存(Redis)互联网架构