JAVA程序员技术栈、业务栈、工具栈

云计算 waitig 846℃ 百度已收录 0评论

JAVA程序员技术栈、业务栈、工具栈
目录:
1、技术栈
2、业务栈
3、工具栈
今天是实习期以来将近100天了,感谢公司给予的期望与同事们提供的帮助。好久没更新博客了,一是懒于写,二是文章写得不够深刻、自身的知识体系还较零乱、理解不够全面和精湛,甚至存在偏差和误导,距离小目标的实现之路还很远很远,现总结一下我自身这三个月来作为一名研发部->项目组->实习JAVA开发工程师用到的一些技术栈、业务栈及工具栈。


三个月来,共参与项目四个:

架构管控项目一个;
开发维护项目一个;
新开发项目一个;
维保项目一个;

针对自己参与的项目,下面列出三个月来我涉及的一些技术栈业务栈工具栈概述:

1、技术栈:

Java:

SSM(Spring + Spring MVC + Mybatis):

Spring:

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架;

Spring MVC:

Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制;

Mybatis:

MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和
Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录;

Java基础

多线程、Future、Callable

内部类、闭包和回调

并发、Executor

Apache Commons CLI 开发命令行工具

JVM:

类加载机制;

线程安全;

垃圾回收机制——新生代、老年代、永久代,能够对需要执行的程序配置相关参数;

JAVA堆;

HaaS:统一Hadoop资源池平台,基于Hadoop等大数据技术,提供统一数据存储、计算能力

HDFS(Hadoop Distributed File System):海量数据存储

存储并管理PB级数据;

处理非结构化数据;

注重数据处理的吞吐量;

应用模式Write_Once_Read_Many;

YARN(Yet Another Resource Negotiator):统一资源调度和分配

ResourceManager:负责集群资源管理和调度;

ApplicationMaster:替代JobTracker负责计算任务的管理和调度;

Nodemanager:替代TaskTracker负责每个节点上计算Task的管理和调度;

MapReduce:非结构化、半结构化数据的海量批处理

Map:映射,用来把一组键值对映射成一组新的键值对;

Reduce:归约,用来保证所有映射的键值对中的每一个共享相同的键组,并进行聚合计算;

核心思想:

利用成百上千个CPU并行处理海量数据;

移动计算比移动数据更划算;

Spark:分布式内存计算框架

Spark是一种与Hadoop相似的开源集群计算环境,Spark使用了内存内运算技术,能在数据尚未写入硬盘时即在内存内分析运算,而相对于传统的大数据解决方案Hadoop的MapReduce会在运行完工作后将中介数据存放在磁盘中,Spark在内存内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍;

Spark Streaming:实时/准实时流的计算框架

Spark Streaming将数据划分为一个一个的数据块(batch),每个数据块通过微批处理的方式对数据进行处理,在Spark Streaming中,数据处理的单位是一批而不是单条,而数据采集确是逐条进行的,因此Spark Streaming系统需要设置间隔使得数据汇总到一定的量后再一并操作,这个间隔就是批处理间隔。批处理间隔是Spark Streaming的核心概念和关键参数,它决定了Spark
Streaming提交作业的频率和数据处理的延迟,同时也影响着数据处理的吞吐量和性能;

HBase:Key/Value、半结构化数据的海量存储和检索

分布式的、面向列的开源数据库;

Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和故障转移机制。这使得HBase可以用于支撑亿级的海量数据存储和应用;

Hive:结构化数据的查询和分析

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务运行;

Hive擅长的是非实时的、离线的、对响应实时性要求不高的海量数据即席查询(SQL查询);

Hive和传统关系型数据库有很大区别,Hive将外部的任务解析成一个MapReduce可执行计划,每次提交任务和执行任务都需要消耗很多时间(可以换用Tez计算框架来提升性能),这也就决定Hive只能处理一些高延迟的应用。

Zookeeper:分布式协同工具

Zookeeper是利用Paxos算法解决消息传递一致性的分布式服务框架;

Zookeeper通过部署多台机器,能够实现分布式的负载均衡的访问服务。不同的Client向Zookeeper中不同机器请求数据;

为了实现集群中配置数据的增删改查保证一致性问题,需要有主节点,由主节点来做出修改的动作,并同步到其它节点上面;

当主节点出现故障时,将在其他节点中自动通过一定的选举方法选举出新的主节点;

Oozie:任务调度工具

Oozie是Hadoop平台的一种工作流调度引擎,Oozie是一种Java Web应用程序,它运行在Java Servlet容器(Tomcat),并使用数据库来存储以下内容:

工作流定义;

当前运行的工作流实例,包括实例的状态和变量;

Oozie工作流是放置在控制依赖DAG中的一组动作,其中指定了动作执行的顺序;

Ambari:可视化集群管理工具

部署、启动、监控、查看、关闭Hadoop集群,可视化监控、运维、告警;

Ambari主要由两部分组成:

Ambari Server;

Ambari Client;

用户通过Ambari Server通知Ambari Agent安装对应的软件,Ambari Agent会定时地发送各个机器每个软件模块的状态给Ambari Server,最终这些状态信息会呈现在Ambari的GUI,方便用户了解到集群的各种状态,并进行相应的维护;

Kafka:分布式消息总线

Kafka是一个低延迟高吞吐的分布式消息队列,适用于离线和在线消息消费,用于低延迟地收集和发送大量的事件和日志数据;

消息队列(Message Queue)用于将消息生产的前端和后端服务架构解耦,它是一种pub-sub结构,前端消息生产者不需要知道后端消息消费者的情况,只需要将消息发布到消息队列中,且只用发布一次,即可认为消息已经被可靠存储了,不用再维护消息的一致性和持久化,同时消息只传输一次就可以给后端多个消费者,避免了每个消费者都直接去前端获取造成的前端服务器计算资源和带宽的浪费,甚至影响生产环境;

消息队列分为以下几种角色: 

Producer:生产者,即消息生产者,比如实时信令数据;

Consumer: 消费者,即消息的消费者,比如后端的实时统计程序和批量挖掘程序;

Consumer Group:消费者组,即消费者的并发单位,在数据量比较大的时候,需要分布式集群来处理消息,针对同一种消息,一组消费者各自消费某一Topic(话题,代表一些消息,Topic 是一个逻辑单位,一个 Topic 被划分成 N 个 Partition,在数据量大的时候通过 Partition 来实现分布式传输)的一部分,来协作处理;

Broker:存储节点,Kafka支持将消息进行短暂的持久化,比如存储最近一周的数据,以便下游集群故障时,重新订阅之前丢失的数据。

在Kafka中,Producer自动通过Zookeeper获取到Broker列表,通过Partition算法自动负载均衡将消息发送到Broker集群。Broker 收到消息后自动分发到副本 Broker 上保证消息的可靠性。下游消费者通过 Zookeeper获取Broker集群位置和Topic等信息,自动完成订阅消费等动作。 

Kerberos & Ranger:安全加固

Kerberos:

通过密钥系统为客户机/服务器应用程序提供强大的认证服务;

Apache Ranger:

集中式安全管理框架,并解决授权和审计;

身份验证(Authentication):基于Kerberos的用户、服务身份验证;

统一账户(Account):使用统一应用账号访问平台众多服务;

访问授权(Authorization):基于Ranger的精细粒度访问权限;

操作审计(Audit):基于Ranger的集中式审计日志;

DBaaS:开箱即用的关系型数据库服务

MySQL高可用:

主从复制

一主一从 + Keepalived + VRRP((Virtual Router Redundancy Protocol,虚拟路由冗余协议)

Keepalived:

Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

VRRP:

解决静态路由单点故障问题,VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

采用一主一从构建高可用MySQL服务,当主机宕机时,可以自动触发主从节点切换。通过使用VIP + Keepalived组件,实现主从切换时MySQL服务IP自动漂移,主从库自动切换。

MHA(一主一从一只读) + Keepalived + VRRP:

MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明

CssS:提供标准化的容器技术和容器管理方案,支撑无状态应用的标准化打包和部署

Docker:开源应用容器引擎

Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目 基于 Go 语言开发,并遵从 Apache 2.0 协议;
当前,Docker可以在容器内部快速自动化部署应用,并可以通过内核虚拟化技术 (namespaces及cgroups等) 来提供容器的资源隔离与安全保障等;
Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似 虚拟机(VM)额外的操作系统开销,提高资源利用率,并且提升诸如I/O等方面的性能;
Docker彻底释放了虚拟化的潜力和威力,极大降低了云计算资源供应的成本,同时让业务应用的开发、测试、部署都变得前所未有敏捷、高效和轻松;

Kubernetes:容器集群管理系统

Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:

使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run);

以集群的方式运行、管理跨机器的容器;

解决Docker跨机器容器之间的通讯问题;

Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态;

DevOps:开发运维一体化

第一阶段:核心实践和试点;
第二阶段:持续集成和测试;
第三阶段:持续部署和交付;
第四阶段:持续运维;
第五阶段:持续评估改进;

统一日志服务:提供多租户安全的系统、应用海量日志分析、交互式查询和可视化

核心能力:

规划构建的统一日志平台核心能力包括:

多租户安全:支持多租户端到端业务日志的存储、分析、可视化能力,支持多租户数据安全;

分析挖掘能力:通过Elasticsearch的结构化查询,实现复杂的多维度联合查询及数据聚合,深度挖掘日志数据;

可视化能力:支持图表可视化呈现分析结果,支持Dashboard实时监控关键指标;

Filebeat:

轻量级的日志采集器,部署于应用侧,负责实时采集日志;

Logstash:

负责日志解析和转发,灵活的正则配置可同时处理不同数据结构的日志,并写入Elasticsearch不同索引;

Kafka:

分布式消息队列,在Filebeat和Logstash中引入分布式消息队列Kafka,可以从容的应对峰值数据的高负载,并且在Logstash出现故障时,具备良好的恢复能力,可直接从Kafka做数据回放,避免回溯至若干上游应用;

Elasticsearch:

负责日志(原始数据、分析数据)的存储、索引和搜索,是实时分析数据流程的核心组件;

Kibana:

前端可视化工具,Elasticsearch的皮肤,结合Elasticsearch丰富的查询逻辑,可定制多种图表;

Linux命令行:

FTP、不同服务器之间、服务器与本地上传/下载、进程监控、内存监控、JVM监控、打包部署、Vim编辑、文件授权、审阅日志文件等等;

Bash脚本开发:

能够阅读并编写简单的脚本;

Python:

能够阅读一般的Python脚本,深入后可学习爬虫;

机器学习算法:

逻辑回归算法;

基于特征的推荐算法;

分类算法;

聚类算法;

2、工具栈:

版本管理工具:Git,SVN;

JAVA开发IDE:Intellij IDEA;

项目构建工具:Maven;

文本编辑器:Subline、NotePad等;

数据库管理工具:Navicat、SQLite Free等;

终端仿真程序:SecureCRT、Xshell5等;

3、业务栈:

Tower化记录:

做好任务的Tower化记录,包括:

需求由来;

任务的具体描述;

解决问题的过程中关键细节记录;

抄送给相关的项目负责人,并给出制定出解决问题的时间;

任务结论及相关解决方案文件的上传;

CPS工作清单:

对于维护过程中出现的每一个相关问题,应养成记录的良好习惯,方便未来进行整理和排查。因此建立DMP项目维护工作清单,对于维护项的类别、详细描述、维护时间、维护耗时、处理结果、维护相关人员及对应的Tower任务链接进行记录;

现有任务梳理:

梳理遗留任务清单并标注优先级;

评估还需要多少人天可以完成问题及Bug;

评估未来的运维(不含新需求)每周需要投入的人力;

每周工作明细:

bug修复:总数 + 清单明细(包括分工、人天耗时);

新功能增加:总数 + 清单明细;

功能优化:总数 + 清单明细;

下周工作计划:

遇到的问题:

解决方案:

XXX

求助:

XXX


本文由【waitig】发表在等英博客
本文固定链接:JAVA程序员技术栈、业务栈、工具栈
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)