乐趣区

关于java:2021Java-程序员最常用技术栈和工具集合建议收藏

欢送微信搜寻公众号【java 版 web 我的项目】获取资源:java 学习视频 / 设计模式笔记 / 算法手册 /java 我的项目

作为一枚 Java 程序员,须要把握哪些技术和工具能力实现一个 JavaWeb 我的项目呢?明天列举一些罕用技术和工具,这些技术都是我这 10 年工作中用的比拟多的,我晓得技术栈远不止这些,自己只列本人相熟和用的最多的,实现一个我的项目相对够用了。说这么多技术不是让大家都要相熟,有些太老的当初也用的少了甚至不必了,自己次要联合我这 10 年开发教训通知大家 JavaWeb 的罕用技术栈。

上面这张是技术栈思维导图:

技术栈

什么是技术栈?
举个例子:
开发一个一般管理系统,会用到 Sprin Boot+MyBatis+Spring+Mysql+Redis+RabbitMq+Nginx+Vue+Shiro+html+ 等等,这些技术合起来就能够称为技术栈。

我将技术栈大抵分为 5 大块:前端、后端、中间件、数据库和工具。

前端

JSP

JSP 全称 Java Server Pages,是一种动静网页开发技术。它应用 JSP 标签在 HTML 网页中插入 Java 代码。

JSP 实质上是一个 servlet,次要用于实现 Java web 应用程序的用户界面局部。

<html>
    <head>
           <title> 第一个 JSP 程序 </title>
    </head>
    <body>
           <%
                  out.println("Hello World!");
           %>
    </body>
</html>

JSP 这种网页技术我猜 5 年以下的程序员根本没接触过,10 年前我接触的我的项目前端根本都是采纳的 JSP 技术,jsp 配合各种 html+jquery/JavaScript+css 实现前端页面开发。

前端框架

DWZ、EasyUI、EXT、BootStrap、KendoUI 都是基于基于 HTML、CSS、JavaScript/jquery 的一些富文本客户端 UI 框架,在过后几乎是后端开发人员的福音。这些框架最大的特点就是官网上提供了各种组件的应用办法,后端人员只有套到 JSP 页面中,进行数据渲染即可。这些 UI 框架格调根本曾经固定,更适宜开发一些治理类零碎,都包含:弱小的数据源,通用的利落(Drag-and-Drop)性能,模板,和 UI 控件。

DWZ

是中国人本人开发的基于 jQuery 实现的 Ajax RIA 开源框架,设计指标是简略实用, 疾速开发, 升高 ajax 开发成本。

官网:https://jui.org/

EasyUI

easyui 是一种基于 jQuery 的用户界面插件汇合, 为创立现代化,互动,JavaScript 应用程序,提供必要的性能。应用 easyui 你不须要写很多代码,你只须要通过编写一些简略 HTML 标记,就能够定义用户界面, 为网页开发的工夫和规模。

官网;http://www.jeasyui.com/

EXT

ExtJS 是基于 YUI(雅虎用户界面)的 sencha 的 JavaScript 框架和产品,它基本上是具备古代 UI 的桌面利用程序开发平台。

中武官网:http://extjs-doc-cn.github.io…

BootStrap

bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包

中武官网:https://www.bootcss.com/

KendoUI

是一套 JavaScript 函式库,提供抽象化、可自订主题的 GUI 管制项与动画成果。基于 jQuery JavaScript 函式库,可用来建构互动式的 Web 利用

官网:http://www.kendoui.io/

FreeMarker

FreeMarker 是一个收费的模板引擎,一个基于模板生成文本输入的通用工具,应用纯 Java 编写的,用来生成 HTML Web 页面,特地是基于 MVC 模式的应用程序。通常由 Java 程序筹备要显示的数据,由 FreeMarker 生成页面,通过模板显示筹备的数据(如下图)

FreeMarker 不是一个 Web 利用框架,FreeMarker 与容器无关,也能够在模板中应用 JSP 标记库。

<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

html

下面很多前端框架都是基于 html 的,须要你有 js/jq、css 根底,这是所有前端框架的根底。因为光框架有时并不能满足咱们的需要,有时须要对框架无奈实现的性能须要在框架根底上调整;还有这个飞速发展的互联网时代,对前端的要求越来越高,原生 html 失去了疾速倒退,根本所有前端成果应用原生时能够实现的。

VUE

vue.js 应用了基于 HTML 的模板语法,容许开发者申明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是非法的 HTML,所以能被遵循标准的浏览器和 HTML 解析器解析。

在底层的实现上,Vue 将模板编译成虚构 DOM 渲染函数。联合响应零碎,Vue 可能智能地计算出起码须要从新渲染多少组件,并把 DOM 操作次数减到起码。

VUE+elementUI 目前应用最多的,尤其是开发一些后盾管理系统还是比较简单便捷的。

后端

servlet

servlet 是 Server Applet 的简称,翻译过去就是服务程序,简略的讲就是是运行在服务器上的一个小程序,用来解决服务器申请的。咱们通过浏览器拜访一个利用,在这个过程中,咱们的浏览器发送拜访申请,服务器接管申请,并对浏览器的申请作出相应的解决, 这就是咱们相熟的 B / S 模型(浏览器-服务器模型).而 servlet 就是对申请作出解决的组件,运行于反对 Java 的应用服务器中。如图如是:

struts

struts 次要是指 struts1 和 struts2,是经典的 MVC 框架,除去一些老我的项目,当初用的越来越少了。但 struts1 和 struts2 还是有区别的,次要区别二者实质不一样。

struts1:通过采纳 Java Servlet/JSP 技术,实现了基于 Java EE Web 利用的 Model-View-Controller(MVC)设计模式的利用框架,是 MVC 经典设计模式中的一个经典产品。

struts2:以 WebWork 为外围,采纳拦截器的机制来解决用户的申请,这样的设计也使得业务逻辑控制器可能与 ServletAPI 齐全脱离开,所以 Struts 2 能够了解为 WebWork 的更新产品。

最经典的组合 strutsMVC+SPring+Hibernate,号称 SSH,当年都是面试必问的技术。

Spring

Spring 框架是一个开源 Java 利用框架,解决了开发者在开发中遇到的许多常见的问题,提供了功能强大 IOC、AOP 及 Web MVC 等性能。Spring 能够独自利用于应用程序,也能够和 Struts、Webwork 等泛滥 Web 框架组合应用。Spring 框架次要由七局部组成,别离是 Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Context、Spring Web 和 Spring Web MVC。

长久层框架

jdbc

JDBC(Java Data Base Connectivity,java 数据库连贯)是一种用于执行 SQL 语句的 Java API,能够为多种关系数据库提供对立拜访,它由一组用 Java 语言编写的类和接口组成。JDBC 提供了一种基准,据此能够构建更高级的工具和接口,使数据库开发人员可能编写数据库应用程序。

晚期我的项目大部分都是通过对 JDBC 封装来操作数据库,实现增删改查,对性能思考也不多,随时间推移一直衍生出很多框架,例如:mybatis,hibernate 等。

ibatis

iBATIS 一词来源于“internet”和“abatis”的组合,是一个由 Clinton Begin 在 2001 年发动的凋谢源代码我的项目。最后侧重于明码软件的开发,当初是一个基于 Java 的长久层框架。iBATIS 提供的长久层框架包含 SQL Maps 和 Data Access Objects(DAO),同时还提供一个利用这个框架开发的 JPetStore 实例。

iBATIS 目前提供了三种语言实现的版本,包含:Java、.NET 以及 Ruby。

mybatis

MyBatis 本是 apache 的一个开源我的项目 iBatis, 2010 年这个我的项目由 apache software foundation 迁徙到了 google code,并且改名为 MyBatis。

MyBatis 是一款优良的长久层框架,它反对定制化 SQL、存储过程以及高级映射。MyBatis 防止了简直所有的 JDBC 代码和手动设置参数以及获取后果集。

MyBatis-Plus

Mybatis 加强工具包 – 只做加强不做扭转,简化 CRUD 操作

JPA

JPA 是 Java Persistence API 的简称,中文名 Java 长久层 API,是 JDK 5.0 注解或 XML 形容对象-关系表的映射关系,并将运行期的实体对象长久化到数据库中。

Sun 引入新的 JPA ORM 标准出于两个起因:其一,简化现有 Java EE 和 Java SE 利用开发工作;其二,Sun 心愿整合 ORM 技术,实现天下归一。

Spring Boot

SpringBoot 是由 Pivotal 团队在 2013 年开始研发、2014 年 4 月公布第一个版本的全新开源的轻量级框架。它基于 Spring4.0 设计,不仅继承了 Spring 框架原有的优良个性,而且还通过简化配置来进一步简化了 Spring 利用的整个搭建和开发过程。另外 SpringBoot 通过集成大量的框架使得依赖包的版本抵触,以及援用的不稳定性等问题失去了很好的解决。

分布式 / 微服务

Spring Cloud

Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、管制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。应用 Spring Cloud 开发者能够疾速实现上述这些模式。

Spring Cloud 的 GitHub 主页:https://github.com/spring-cloud

dubbo

Dubbo 是阿里巴巴公司开源的一个高性能优良的服务框架,使得利用可通过高性能的 RPC 实现服务的输入和输出性能,能够和 Spring 框架无缝集成。

次要核心部件:

Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 音讯机制

RPC: 一个近程过程调用的形象,反对负载平衡、容灾和集群性能

Registry: 服务目录框架用于服务的注册和服务事件公布和订阅

Spring Cloud Alibaba

Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此我的项目蕴含开发分布式应用服务的必须组件,不便开发者通过 Spring Cloud 编程模型轻松应用这些组件来开发分布式应用服务。

依靠 Spring Cloud Alibaba,您只须要增加一些注解和大量配置,就能够将 Spring Cloud 利用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用零碎。

平安框架

shiro

Apache Shiro 是 Java 的一个平安框架。目前,应用 Apache Shiro 的人越来越多,因为它相当简略,比照 Spring Security,可能没有 Spring Security 做的功能强大,然而在理论工作时可能并不需要那么简单的货色,所以应用小而简略的 Shiro 就足够了。对于它俩到底哪个好,这个不用纠结,能更简略的解决我的项目问题就好了。

Spring Security

Spring Security 是一个可能为基于 Spring 的企业应用零碎提供申明式的平安访问控制解决方案的平安框架。它提供了一组能够在 Spring 利用上下文中配置的 Bean,充分利用了 Spring IoC,DI(管制反转 Inversion of Control ,DI:Dependency Injection 依赖注入)和 AOP(面向切面编程)性能,为利用零碎提供申明式的平安访问控制性能,缩小了为企业零碎安全控制编写大量反复代码的工作。

oauth2.0

OAuth(凋谢受权)是一个凋谢规范,容许用户让第三方利用拜访该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和明码提供给第三方利用。

OAuth 2.0 是目前比拟风行的做法,它率先被 Google, Yahoo, Microsoft, Facebook 等应用。之所以标注为 2.0,是因为最后有一个 1.0 协定,但这个 1.0 协定被弄得太简单,易用性差,所以没有失去遍及。2.0 是一个新的设计,协定简略清晰,但它并不兼容 1.0,能够说与 1.0 没什么关系。

项目管理

maven

Maven 是 Apache 下的一个纯 Java 开发的开源我的项目。利用一个地方信息片断能治理一个我的项目的构建、报告和文档等步骤。是一个项目管理工具,能够对 Java 我的项目进行构建、依赖治理。

ant

ant 是一个将软件编译、测试、部署等步骤分割在一起加以自动化的一个工具,大多用于 Java 环境中的软件开发。在理论软件开发中,有很多中央能够用到 ant。

gradle

Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的我的项目自动化构建开源工具。它应用一种基于 Groovy 的特定畛域语言 (DSL) 来申明我的项目设置,目前也减少了基于 Kotlin 语言的 kotlin-based DSL,摈弃了基于 XML 的各种繁琐配置。

服务器软件

tomcat

Tomcat 服务器是一个收费的凋谢源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型零碎和并发拜访用户不是很多的场合下被广泛应用,是开发和调试 JSP 程序的首选

Apache

Apache(阿帕奇)是世界应用排名第一的 Web 服务器软件。它能够运行在简直所有宽泛应用的计算机平台上,因为其跨平台和安全性被宽泛应用,是最风行的 Web 服务器端软件之一

Jetty

Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。

weblogic

WebLogic Server 是专门为企业电子商务利用零碎开发的。企业电子商务利用零碎须要疾速开发,并要求服务器端组件具备良好的灵活性和安全性,同时还要反对要害工作所必须的扩大、性能、和高可用性。WebLogic Server 简化了可移植及可扩大的利用零碎的开发,并为其它利用 零碎和零碎提供了丰盛的互操作性。

nginx

Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协定下发行。其特点是占有内存少,并发能力强。

中间件

缓存

缓存是当初零碎中必不可少的模块,并且曾经成为了高并发高性能架构的一个要害组件。缓存的次要作用:晋升性能 缓解数据库压力

Redis

Redis 是一个开源的内存数据结构存储,用作数据库、缓存和音讯代理。提供诸如字符串、哈希、列表、汇合、带范畴查问的排序汇合、位图、超日志、天文空间索引和流等数据结构。具备内置的复制、Lua 脚本、LRU 逐出、事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis Cluster 的主动分区提供高可用性。

MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 利用提供可扩大的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中性能最丰盛,最像关系数据库的。

Memcached

Memcached 是一个自在开源的,高性能,分布式内存对象缓存零碎,用来进步 Web 利用扩展性的重要因素。是一个基于内存的 key-value 存储,用来存储小块的任意数据(字符串、对象)。简洁而弱小,它的简洁设计便于疾速开发,加重开发难度,解决了大数据量缓存的很多问题。个别的应用目标是,通过缓存数据库查问后果,缩小数据库拜访次数,以进步动静 Web 利用的速度、进步可扩展性。

差异性我就不多说了,简略说下他们的应用场景:

  • Memcached:动静零碎中加重数据库负载,晋升性能;做缓存,适宜多读少写,大数据量的状况(如人人网大量查问用户信息、好友信息、文章信息等)。
  • Redis:实用于对读写效率要求都很高,数据处理业务简单和对安全性要求较高的零碎(如新浪微博的计数和微博公布局部零碎,对数据安全性、读写要求都很高)。
  • MongoDB: 次要解决海量数据的拜访效率问题。

搜寻

solr

Solr 是一个独立的企业级搜寻应用服务器,它对外提供相似于 Web-service 的 API 接口。用户能够通过 http 申请,向搜索引擎服务器提交肯定格局的 XML 文件,生成索引;也能够通过 Http Get 操作提出查找申请,并失去 XML 格局的返回后果。

Elasticsearch

Elasticsearch 是一个基于 Lucene 的搜寻服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口

二者次要区别

es 根本是开箱即用,非常简单,Solr 稍微简单。

Solr 反对更多格局的数据,比方 JSON、XML、CSV,而 Elasticsearch 仅反对 json 文件格式。

Solr 查问快,但更新索引时慢(即插入删除慢),ES 建设索引快(即查问慢),即实时性查问快。

ELK

之所以举荐 ELK 是因为面对散布式微服务状况下,会显示出他的威力,不论是数据收集、数据处理、还是数据分析能够节约很多工夫。ELK 是 Elasticsearch + Logstash + Kibana 三个开源软件的组合,然而通常为了进步性能须要借助 kafka,利用 Filebeat 进行日志收集,上面这个架构图是我做过的一个日志服务平台。

定时工作

说定定时工作大家可能都接触过,例如 Spring 自带的定时工作 SpringTask,然而 SpringTask 是存在很多问题的,例如:最致命的一个问题就是一旦定时抛出异样,生命就完结,下一次不会再执行。简单业务中应用起来是不不便的,这里举荐两个定时工作框架 Quartz 和 xx-job,第三方的性能比拟弱小,好用。

Quartz

Quartz 是 OpenSymphony 开源组织在 Job scheduling 畛域又一个开源我的项目,齐全由 Java 开发,能够用来执行定时工作,相似于 java.util.Timer。然而相较于 Timer,Quartz 减少了很多性能:

  • 持久性作业 – 就是放弃调度定时的状态;
  • 作业管理 – 对调度作业进行无效的治理;

xx-job

XXL-JOB 是一个轻量级分布式任务调度平台,其外围设计指标是开发迅速、学习简略、轻量级、易扩大。现已凋谢源代码并接入多家公司线上产品线,开箱即用。

目前已有多家公司接入 xxl-job,包含比拟出名的公众点评,京东,优信二手车,北京尚德,360 金融 (360),联想集团 (联想),易信 (网易)等等 ….
Quartz 作为开源作业调度中的佼佼者,是作业调度的首选

Quartz 在集群环境下只能通过 API 的形式对工作治理,同时,零碎侵入性相当严重,而 XX-JOB 能够完满解决集群下工作额治理。所以,能够依据本人业务状况抉择适合定时工作框架,

配置核心

什么是配置核心?

集中将利用零碎中对配置信息的治理作为一个新的利用功能模块,区别与传统的配置信息扩散到零碎各个角落形式,进行集中统一治理,并且提供额定性能。尤其是在微服务架构中,是不可或缺组件,甚至是必要组件之一。

为什么要应用配置核心?

在微服务体系中,服务的数量以及配置信息的日益增多,比方各种服务器参数配置、各种数据库拜访参数配置、各种环境下利用配置信息的不同、配置信息批改之后实时失效等等,传统的配置文件形式或者将配置信息寄存于数据库中的形式已无奈满足开发人员对配置管理的要求。常见的配置核心中间件有:SpringCloud Config,Nacos,apollo 等。

SpringCloud Config

2014 年 9 月开源,Spring Cloud 生态组件,能够和 Spring Cloud 体系无缝整合,Spring Cloud Config 反对通过 /bus/refresh 端点的 destination 参数来指定要更新配置的机器,不过整个流程不够自动化和体系化。绝对于 Apollo 和 Nacos 还是比拟弱的。

Nacos

2018 年 6 月,阿里开源的配置核心,也能够做 DNS 和 RPC 的服务发现。Nacos 应用起来绝对比拟简洁,在对性能要求比拟高的大规模场景更适宜。此外,Nacos 除了提供配置核心的性能,还提供了动静服务发现、服务共享与治理的性能,升高了服务化革新过程中的难度。

apollo(阿波罗)

2016 年 5 月,携程开源的配置管理核心,具备标准的权限、流程治理等个性,Apollo 能够间接在管制台上点灰度公布指定公布机器的 IP,接着再全量公布,做得比拟体系化。

三者比照如何抉择:

外围性能: Apollo 和 Nacos 绝对于 Spring Cloud Config 的生态反对更广

实时推送: Nacos 和 Apollo 在配置实时推送链路上是比较简单高效的,Spring Cloud Config 比较复杂。

高可用部署: Nacos 的部署构造比较简单,运维老本较低。Apollo 部署组件较多,运维老本比 Nacos 高。Spring Cloud Config 生产高可用的老本最高。

监控

服务器监控是实时把握服务器工作状态,并在须要时能够随时调用监控记录进行查看。

SpringBootAdmin

Spring Boot Admin 用来治理和监控 Spring Boot 应用程序,通过 UI 来查看应用程序的状态,例如 Spring Beans,零碎属性,线程,http 的调用状况等无限状态。

Druid

我晓得 Druid 更多的用处就是连接池,其实他还有一个对 SQL 监控性能。

SkyWalking

Skywalking 是由国内开源爱好者吴晟(原 OneAPM 工程师,目前在华为)开源并提交到 Apache 孵化器的产品,它同时排汇了 Zipkin/Pinpoint/CAT 的设计思路,反对非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控零碎。另外社区还倒退出了一个叫 OpenTracing 的组织,旨在推动调用链监控的一些标准和规范工作。

存储

把波及到数据库相干或者能够作为数据仓库的中间件都归到一起了。

MyCat

Mycat 是一个开源数据库中间件,是一个实现了 MySQL 协定的的数据库中间件服务器,咱们能够把它看作是一个数据库代理,用 MySQL 客户端工具和命令行拜访 Mycat,而 Mycat 再应用用 MySQL 原生 (Native) 协定与多个 MySQL 服务器通信,也能够用 JDBC 协定与大多数支流数据库服务器通信,包含 SQL Server、Oracle、DB2、PostgreSQL 等支流数据库,也反对 MongoDB 这种新型 NoSQL 形式的存储,将来还会反对更多类型的存储; 个别地,Mycat 次要用于代理 MySQL 数据库,尽管它也反对去拜访其余类型的数据库;

Mycat 官网:http://www.mycat.io/

Canal

咱们先看官网的介绍

canal,译意为水道 / 管道 / 沟渠,主要用途是基于 MySQL 数据库增量日志解析 ,提供 增量数据订阅和生产

这句介绍有几个关键字:增量日志,增量数据订阅和生产

这里咱们能够简略地把 canal 了解为一个用来 同步增量数据的一个工具

接下来咱们看一张官网提供的示意图:

sharing-jdbc

定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额定服务。它应用客户端直连数据库,以 jar 包模式提供服务,无需额定部署和依赖,可了解为增强版的 JDBC 驱动,齐全兼容 JDBC 和各种 ORM 框架。

次要性能

  • 分库 & 分表
  • 读写拆散
  • 分布式主键

zookeeper

ZooKeeper 是 Hadoop 的正式子项目,它是一个针对大型分布式系统的牢靠协调系统,提供的性能包含:配置保护、名字服务、分布式同步、组服务等。ZooKeeper 的指标就是封装好简单易出错的要害服务,将简略易用的接口和性能高效、性能稳固的零碎提供给用户。

事务

这个事务更多指的是分布式事务处理插件。

Apache ShardingSphere

Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(布局中)这 3 款互相独立,却又可能混合部署配合应用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理性能,可实用于如 Java 同构、异构语言、容器、云原生等各种多样化的利用场景。

Seata

Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来。是阿里开源的分布式事务框架,属于二阶段提交模式。

音讯队列

什么是音讯队列

音讯队列是一个寄存音讯的容器,当咱们须要应用音讯的时候能够取出音讯供本人应用。音讯队列是分布式系统中重要的组件,应用音讯队列次要是为了通过异步解决进步零碎性能和削峰、升高零碎耦合性。目前应用较多的音讯队列有 ActiveMQ,RabbitMQ,Kafka,RocketMQ。

为什么须要音讯队列

1. 通过异步解决进步零碎性能(削峰、缩小响应所需工夫);

2. 升高零碎耦合性;

Kafka

Kafka 是由 Apache 软件基金会开发的一个开源流解决平台,由 Scala 和 Java 编写。Kafka 是一种高吞吐量的分布式公布订阅音讯零碎,它能够解决消费者在网站中的所有动作流数据。这些数据通常是因为吞吐量的要求而通过解决日志和日志聚合来解决。对于像 Hadoop 一样的日志数据和离线剖析零碎,但又要求实时处理的限度,这是一个可行的解决方案。Kafka 的目标是通过 Hadoop 的并行加载机制来对立线上和离线的音讯解决,也是为了通过集群来提供实时的音讯。

RabbitMQ

AMQP,即 Advanced Message Queuing Protocol,高级音讯队列协定,是应用层协定的一个凋谢规范,为面向音讯的中间件设计。消息中间件次要用于组件之间的解耦,音讯的发送者无需晓得音讯使用者的存在,反之亦然。
AMQP 的次要特色是面向音讯、队列、路由(包含点对点和公布 / 订阅)、可靠性、平安。
RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,反对多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,反对 AJAX。用于在分布式系统中存储转发音讯,在易用性、扩展性、高可用性等方面体现不俗。

ActiveMQ

ActiveMQ 是一种开源的基于 JMS(Java Message Servie)标准的一种消息中间件的实现,ActiveMQ 的设计指标是提供规范的,面向音讯的,可能逾越多语言和多零碎的利用集成音讯通信中间件。

三者区别及其应用场景

个性 ActiveMQ RabbitMQ kafka
开发语言 java erlang scala
单机吞吐量 万级 万级 10 万级
时效性 ms 级 us 级 ms 级以内
可用性 高(主从架构) 高(主从架构) 十分高(分布式架构)
性能个性 成熟的产品,在很多公司失去利用;有较多的文档;各种协定反对较好 基于 erlang 开发,所以并发能力很强,性能极其好,延时很低; 治理界面较丰盛 只反对次要的 MQ 性能,像一些音讯查问,音讯回溯等性能没有提供,毕竟是为大数据筹备的,在大数据畛域利用广。

数据库

该数据库次要是指关系型数据库,是依照数据结构来组织、存储和治理数据的仓库,数据库是存放数据的仓库,是一个零碎或者软件必不可少的一部分。每个数据库都有一个或多个不同的 API 用于创立,拜访,治理,搜寻和复制所保留的数据。咱们也能够将数据存储在文件中,然而在文件中读写数据速度绝对较慢。

所以,当初咱们应用关系型数据库管理系统来存储和治理大数据量。所谓的关系型数据库,是建设在关系模型根底上的数据库,借助于汇合代数等数学概念和办法来解决数据库中的数据。

关系数据库管理系统的特点:

  • 1. 数据以表格的模式呈现
  • 2. 每行为各种记录名称
  • 3. 每列为记录名称所对应的数据域
  • 4. 许多的行和列组成一张表单
  • 5. 若干的表单组成 database

常见的数据管理系统次要有:oracle、mysql、SQL Server、access、TiDB。

oracle

Oracle Database,简称 Oracle。Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为外围的一组软件产品,是目前最风行的客户 / 服务器(client/server)的数据库之一。Oracle 数据库是目前世界上应用最为宽泛的数据库管理系统,作为一个通用的数据库系统,它具备残缺的数据管理性能;作为一个关系型数据库,它是一个齐备关系的产品;作为分布式数据库它实现了分布式解决性能,但它的所有常识,只有在一种机型上学习了 Oracle 常识,便能在各种类型的机器上应用它。

mysql

MySQL 是最风行的关系型数据库管理系统,在 WEB 利用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。目前也是 Oracle 公司来托管。

SQL Server

美国 Microsoft 公司推出的一种关系型数据库系统。SQL Server 是一个可扩大的、高性能的、为分布式客户机 / 服务器计算所设计的数据库管理系统,实现了与 WindowsNT 的有机联合,提供了基于事务的企业级信息管理系统计划。

access

Access 是微软把数据库引擎的图形用户界面和软件开发工具联合在一起的一个数据库管理系统。它是微软 OFFICE 的一个成员, 在包含专业版和更高版本的 office 版本外面被独自发售。

TiDB

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时反对在线事务处理与在线剖析解决 (Hybrid Transactional and Analytical Processing, HTAP)的交融型分布式数据库产品,具备程度扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协定和 MySQL 生态等重要个性。指标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适宜高可用、强统一要求较高、数据规模较大等各种利用场景。

下面这几个数据库优缺点都比拟显著,不在啰嗦了,大家在工作中能够依据本人理论状况抉择适合的数据。

工具

开发

IntelliJ IDEA

IntelliJ 在业界被公认为最好的 java 开发工具,尤其在智能代码助手、代码主动提醒、重构、JavaEE 反对、各类版本工具(git、svn 等)、JUnit、CVS 整合、代码剖析、翻新的 GUI 设计等方面的性能能够说是超常的。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以谨严著称的东欧程序员为主。它的旗舰版本还反对 HTML,CSS,PHP,MySQL,Python 等。免费版只反对 Java,Kotlin 等多数语言。

eclipse

Eclipse 是一个凋谢源代码的、基于 Java 的可扩大开发平台,是 Java 的集成开发环境(IDE),当然 Eclipse 也能够作为其余开发语言的集成开发环境,如 C,C++,PHP,和 Ruby 等。

MyEclipse

MyEclipse,是在 Eclipse 根底上加上本人的插件开发而成的功能强大的企业级集成开发环境,次要用于 Java、Java EE 以及挪动利用的开发。在最新版本的 MyEclipse 中,配合 CodeMix 应用反对也非常宽泛,尤其是对各种开源产品和支流开发框架的反对相当不错。目前已反对 PHP、Python、Vue、Angular、React、Java、Java EE 等语言和框架开发。

这三款工具好坏我也不做任何评估,每个工具用户都不少,我四周 IntelliJ IDEA 和 MyEclipse 都有,我集体比拟喜爱用 IntelliJ IDEA。

客户端工具

版本控制

常见的版本空间工具 svn 和 git

svn

TortoiseSVN 是 Subversion 版本控制系统的一个收费开源客户端,能够超过工夫的管理文件和目录。文件保留在地方版本库,除了能记住文件和目录的每次批改以外,版本库十分像一般的文件服务器。你能够将文件复原到过来的版本,并且能够通过查看历史晓得数据做了哪些批改,谁做的批改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。

git

Git 是用于 Linux 内核开发的版本控制工具。与罕用的版本控制工具 Subversion 不同,它采纳了分布式版本库的形式,不用服务器端软件反对,代码的公布和交换极其不便。Git 的速度很快,这样的大我的项目来说天然很重要。Git 最为杰出的是它的合并跟踪(merge tracing)能力。

SVN 的特点是简略,只是须要一个放代码的中央时用是 OK 的。

Git 的特点版本控制能够不依赖网络做任何事件,对分支和合并有更好的反对(这应该算是开发者最关怀的中央)。

数据库

Navicat

Navicat 是一套疾速、牢靠并价格相当便宜的数据库管理工具,专为简化数据库的治理及升高系统管理老本而设。它的设计合乎数据库管理员、开发人员及中小企业的须要。Navicat 是以直觉化的图形用户界面而建的,让你能够以平安并且简略的形式创立、组织、拜访并共用信息。

PLSQL

PL/SQL Developer 是一个集成开发环境,专门开发面向 Oracle 数据库的利用。PL/SQL 也是一种程序语言,叫做过程化 SQL 语言(Procedural Language/SQL)。PL/SQL 是 Oracle 数据库对 SQL 语句的扩大。在一般 SQL 语句的应用上减少了编程语言的特点,所以 PL/SQL 把数据操作和查问语句组织在 PL/SQL 代码的过程性单元中,通过逻辑判断、循环等操作实现简单的性能或者计算,PL/SQL 只有 Oracle 数据库有

Redis Desktop Manager

Redis Desktop Manager 是一款 windows 平台下的可视化 redis 数据库桌面管理工具,应用它你能够查看、删除、批改你的 redis 数据库数据!

linux 近程

XShell

XShell 是一个弱小的平安终端模仿软件,它反对 SSH1,SSH2,以及 Microsoft Windows 平台的 TELNET 协定。
XShell 能够在 Windows 界面下用来拜访远端不同零碎下的服务器,从而比拟好的达到近程管制终端的目标。

WinSCP

宝塔

宝塔面板是一个能够装置在服务器上的集成环境,并配套了 web 治理面板,能够在浏览器上间接管制你的服务器,十分不便。能够一键创立网站、FTP、数据库、SSL;平安治理,打算工作,文件治理,PHP 多版本共存及切换;自带根底网站环境,反对 windows 零碎(apache)和 linux 零碎(apache 或 nginx)。

SecureCRT

Secure CRT 是一款 SSH 客户端软件,通过应用内含的 VCP 命令行程序能够进行加密文件的传输。

postMan

Postman 一款十分风行的 API 调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多抉择,例如 Jmeter、soapUI 等。不过,对于开发过程中去调试接口,Postman 的确足够的简略不便,而且功能强大。

辅助

Typora+PicGo

Typora+PicGo,最好用的 Markdown+ 最好用的图床工具!如果写博客的能够珍藏起来。

notepad++

Notepad++ 中文版是程序员必备的文本编辑器,Notepad++ 中文版玲珑高效,反对 27 种编程语言,通吃 C,C++ ,Java ,C#, XML, HTML, PHP,JS 等,Notepad++ 中文版编辑器可完满地取代微软的记事本。

画图

visio

Office Visio 是 Office 软件系列中的负责绘制流程图和示意图的软件,是一款便于 IT 和商务人员就简单信息、零碎和流程进行可视化解决、剖析和交换的软件。应用具备业余外观的 Office Visio 图表,能够促成对系统和流程的理解,深刻理解简单信息并利用这些常识做出更好的业务决策。常见软件架构、流程图都能够在外面实现。

processon

ProcessOn 是一个在线作图工具的聚合平台,它能够在线画流程图、思维导图、UI 原型图、UML、网络拓扑图、组织结构图等等,您无需放心下载和更新的问题,不论 Mac 还是 Windows,一个浏览器就能够随时随地的施展创意,布局工作。

官网:https://www.processon.com/

PowerDesigner

owerDesigner 是一款十分全面的数据库设计工具。应用 PowerDesigner 能够疾速创立表,反对表与表之间建设关系,界面简洁,功能强大。同时反对将 sql 脚本导出,多种导出类型任意筛选,简略实用。

Xmind

XMind 是一个 全功能 的思维导图和头脑风暴软件,为激发灵感和创意而生。作为一款无效晋升工作和生存效率的生产力工具,受到寰球百千万用户的青眼。

iReport

说到 iReport 不得不先介绍 Jasperreport,Jasperreport 是一个报表制作程序,用户须要依照它制订的规定编写一个 XML 文件,而后失去用户须要输入的格式文件。它反对输入的文件格式包含 PDF,HTML,XML,XLS,CVS 等等。而 iReport 就是一个制作 Jasperreport 的 XML 文件的可视化开发工具。

浏览器

Chrome

Google Chrome 是一款由 Google 公司开发的网页浏览器,该浏览器基于其余开源软件撰写,包含 WebKit,指标是晋升稳定性、速度和安全性,并发明出简略且有效率的使用者界面。

搜狗

搜狗浏览器 由搜狗公司开发,基于谷歌 chromium 内核,力求为用户提供跨终端无缝应用体验,让上网更简略、网页浏览更晦涩的浏览器。

火狐

Mozilla Firefox,中文俗称“火狐”,是一个由 Mozilla 开发的自在及凋谢源代码的网页浏览器。其应用 Gecko 排版引擎,反对多种操作系统,如 Windows、macOS 及 GNU/Linux 等

IE

Internet Explorer(简称:IE)是微软公司微软公司推出的一款网页浏览器。原称 Microsoft Internet Explorer(6 版本以前)和 Windows Internet Explorer(7、8、9、10、11 版本)。在 IE7 以前,中文直译为“网络探路者”,但在 IE7 当前官网便间接俗称 ”IE 浏览器 ”。

如果做前端开发,这几款浏览器兼容性都得兼顾。很早之前 IE 浏览器市场是比拟大,随着时间推移,谷歌浏览器占据了比拟大的市场。我集体日常开发中谷歌用的比拟多,非凡状况才会应用其它浏览器。

性能剖析

jmeter

JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最后被设计用于 Web 利用测试,但起初扩大到其余测试畛域。它能够用于测试动态和动静资源,例如动态文件、Java 服务程序、CGI 脚本、Java 对象、数据库,等等。

ab

apache bench 简称 ab, 它是 apache 自带的压力测试工具。ab 十分实用,它不仅能够对 apache 服务器进行网站拜访压力测试,也能够对或其它类型的服务器进行压力测试。

MAT

MAT 是 Java 堆内存剖析工具,可从 http://www.eclipse.org/mat/ 中 …。

你在成为大神的路上都学习了哪些技术,欢送留言交换。

近期热文举荐:
SpringCloud 微服务电商我的项目教程

退出移动版