近一个月接触的东西比较多,梳理一下。
Nginx+Tomcat,
实现负载均衡,同时采用keepalived的形式实现HA。负载后,关键问题就是session共享的问题,可实现的思路较多:Tomcat6以后本身可以使用cluster技术达成。也可以借鉴第三方软件实现。Memcached,redis都是采用的方案,【tomcat8在redis的方案中兼容性稍差,可以改造原有jar包,目前已测试通过】。
NOSQL
Mongodb,文档数据库。实现集群有三种方式,一种是M-S方式,官方不建议采用此方案。一种是rep复制集方式,使用率较高。再者就是sharding方式,需要数据量较大以后建议使用,一般情况下无须此方式。其HA方式也是基于复制集的形式实现。Spring对mongodb支持较多,如jdbcTemplate等等使用方式即可。
Redis,key-value数据库。支持的数据格式较memcached较多,比如string,map,list等等,一般情况下memcached与redis效率上基本上差不多。其HA方式,同样可以采用Keepalived方式实现,采用VIP的结构。Redis本身也支持sentinl的方式实现HA,集成在redis内部。Redis3之后本身支持cluster方式。采用3台机器或以上交叉部署,3Master-3Slave,除非两台机器全部down掉。
Supervisor,进程监控工具,以确保某些关键服务在无端断掉之后能监控到,实现自动重启。
Crontab,linux系统自带的定时任务工具,采用cron方式,当前任务不能实现分布式运行时,可采用特殊部署的形式达到只启动一个任务。
Kafka,一个消息传输开源工具,效率上要优于activeMQ。可以与log4j的appender结合,直接将log4j的日志统一收集起来集中式管理,然后存储起来。主要有三个关键概念。Producer,broker,consumer。集群部署也有几种方式,单broker,多broker,多producer/consumer方式等。采用zookeeper实现服务的注册,其本身也自带zookeeper,当然也可以采用zookeeper独立的服务。
Log4j 2,log4j/logback后又一力作,log4j 2优于两者,效率上要更快,但针对不是很大型的应用而言,log4j/logback基本上可以满足需求。
Logstash,日志收集工作,可以收集多种日志格式,比如nginx,tomcat,mysql等等,采用Input的形式,设置来源,其后output到指定的存储容器中。中间也可以采用filter对input的数据进行格式化处理。多用于系统的监控,特别是集群环境的监控,不必再一个一个机器来查看日志。
Elsticcsearch,基于lucene的搜索引擎工具,存储数据量很大,搜索速度快。Logstash收集的日志可以直接存储到elasticsearch中,方便数据存储及后期数据的分析。
Kibana,ELK(logstash,elsticsearch,kibana)组件中三者中的一个,可以WEB的形式查看日志,监控报警等等。安装比较简单,在Linux中部署中就可以启动看到UI。
Hadoop,现下的大数据默认的标准,一说大数据就联想到hadoop。其有两个关键概念,一个mapreduce,一个是HDFS。Hadoop2版本之后,mapreduce全新升级为Yarn架构,实现方式上差别很多,但效率稍微较1版本中效率高不少。HDFS,分布式文件系统,多用于数据存储,结合其它开源工具使用。Namenode/datanode两个主要的概念,namenode类似目录服务,datanode存储数据。
Hive,数据仓库工具,可以理解为MYSQL来使用。Hive+HDFS,HIVE的数据是存储在HDFS中,但Hive的元数据是存储在关系性数据库中,如debry,mysql等。
部署方式有三种,
一是嵌入式部署,直接内置的debry,此方式只能用于单连接测试使用,生产开发都不建议使用。
二是本地化部署,本机安装数据库,
三是远程式部署,与本机安装类似,多用于生产环境部署。
其专用的HQL语法,使用起来与SQL语法类似,但其可以直接翻译成mapreduce任务来执行,大大降低了编写mapreduce的工作量,但有些问题无法通过HQL解决时,只能编写mapreduce来实现。
Spark,一种内存计算的大数据工具,对机器内存要求较高,但其运行效率是hadoop中的MR远远不及的。
Flume,中文翻译为管道,由名知意。可以JAVA API采用,也可以与log4j集成,对应的有appender,可以将log4j的日志注入flume中。关键因素有source,channel,sink。可以多节点部署,前后衔接。Log4j + flume + hdfs/elsticsearch是比较可行的架构。
Sqoop,之前用过penthon kettle,有点类似。Sqoop主要用于数据传输,从关系库中往非关系库中导入导出。