一个NB的项目其他不说至少高可用,高并发。要达到高可用、高并发;需要各种中间件来支持。一个NB的程序员应该掌握哪些中间件呢??
1、Tomcat和Jetty
Tomcat和Jetty都是一种应用的比较广泛的Servlet引擎,但是相比较于Jetty,Tomcat更加稳定成熟,其市场霸主地位仍然难以撼动。但是两者各有优劣。目前很多公司在开发过程中使用maven来管理项目,因为Jetty比较小巧,而且对maven支持很好,所以很多程序员在开发过程中喜欢使用Jetty启动程序进行开发调试;而Tomcat因为稳定成熟,并且开源,所以无论小公司或者大公司都使用Tomcat来部署开发完成的项目,供生产使用。JAVA程序员这两个应用服务器是不可以不掌握的。
2、Nginx、Apache和LVS
当网站的访问量达到万级别的时候,单台服务已经不能满足需求,这个时候就需要进行集群部署。涉及到集群部署,就会关联上负载均衡。这时LVS Nginx或者LVS Apache实现负载均衡就派上用场了。但是在JAVA领域LVS Nginx是最好的搭配,其中Nginx是必须掌握的中间件,简单的使用Nginx也可以使用路由转发,达到负载均衡的效果。
3、Redis和MongoDB
Redis和MongoDB都是一个NoSQL数据库,虽然都是NoSQL数据库,但是应用的方向还是有很大区别的。
Redis是一个key-value存储系统(布式内缓存,高性能的key-value数据库)。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set-有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
MongoDB是一个介于关系数据库和非关系数据库之间的产品(基于分布式文件存储的数据库),是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。主要解决海量数据的访问效率问题。
4、ActiveMQ和RocketMQ
ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。RcoketMQ由阿里孵化的项目,目前也已经捐赠给Apache基金会了。
ActiveMQ和RocketMQ统称为消息服务系统:解决服务之间的耦合、增加系统并发处理量,也常用于分布式事务中。使用的是标准生产者和消费者模型,有Queue(队列模式)和Topic(发布-订阅模式)两种数据结构:
Queue队列:生产者生产一个消息,只能由一个消费者进行消费
Topic 话题:生产者生产一个消息,可以由多个消费者进行消费。
5、Zookeeper
Zookeeper不是必须的,但是国内由阿里开源的微服务框架Dubbo,使用Zookpeer作为推荐的注册中心,所以显得有必要去了解一下Zookeeper。Dubbo在前几年由阿里开源在GitHub上,开源后的几年,阿里没有在对Dubbo进行过有效的维护,但是经过几年发现很多小公司甚至大企业在用,阿里又开始重视起来了,去年阿里对Dubbo做了重大的版本升级,然后又被 阿里 贡献给了Apache基金会。
作为一个NB且合格的程序员必然需要掌握以上这些中间件。在大公司混也许不需要完全掌握;但是如果在一个不大不小的公司混这些是不然需要掌握的,因为你不仅是开发人员,也是运维人员。