今天准备要写一篇博客的,记录每天的学习情况。如果每天光看书或者视频学习,很难坚持下去,而且看过就会忘了。写博客,是对自己看过东西的二次思考和整理,能够增加记忆。还有就是如果以后面试,再回过头来看自己写的东西,对于面试也是有帮助的。学习,是一个很抽象的东西,每天很难看出自己到底学了些啥,很难让自己有成就感,所以也难以坚持下去,最好就是写博客记录下来。当自己看到类似的文章或者问题时,或许又会有新的想法。从现在开始,每天坚持一篇博客。便于找到自己的不足,及时补救。
今天看了分布式和nio相关的视频,下面谈谈自己对这两种东西的理解。
分布式应用,听起来很高大上,其实自己平时一直都在用。说到分布式,不得不说说单机应用,以前的开发模式是,一个应用,所有的功能都在一台服务器上,最多数据库单独部署在另外的服务器上,这样的项目只适用于用户量很小的业务场景,一旦业务扩展,服务器很难扛住。现在所说的分布式应用,其实就是将整个项目分模块来部署在不同的服务器上,通过注册中心来进行调用。这样的好处是各个模块可以并行开发,更有利于后期的扩展和维护,降低了服务器的负担。如何实现呢。有rpc、resful两种借口,rpc接口是将数据序列化成二进制之后,通过http或tcp进行通信,而resful则通过json字符串来进行数据交互,通过http来进行通信,速度稍微比rpc慢。两者应用的场景不太一样,rpc是基于注册中心的,一般是内部系统之间的调用。如果是对外提供服务,比如给客服端,给其他的公司,这样选择resful接口更加合适。rpc实现分布式应用,需要dubbo,一个rpc框架,并且提供后台管理功能。
注册中心一般选择zk,实现服务的注册。zk一般选择三台及以上,保证服务的高可用。zk内部会选举出一个leader,来提供注册服务。这样我们的rpc生产者就可以注册上了,消费者可以从注册中心获得消费者。一般服务会布置双边,保证高可用。分布式还会用到mq作为消息中间件,可以实现服务之间的解藕,解决并发问题。mq有点对点的和发布订阅的,点对点是队列。还有redis,作为缓存。redis是内存数据库,属于nosql数据库,存储效率比关系型数据库更快。它一般会用来缓存前端用户的请求,提高用户的访问速度,减少对数据库的查询次数。也用在分布式事务上,这个具体还不太清楚。
对于外部的http请求,一般用nginx来实现负载均衡,将请求分发到对应的服务器上。nginx同时可以将请求转发到服务器的对于端口上。
今天还看了nio,rpc的网络通信就是基于nio实现的。通讯效率比传统的io快,能够使用高并发。内部主要是基于缓存来实现,轮询来处理请求。后面准备将nio的原理图补充上来。
2018年1月27日