liu 发布的文章

PHP计算两个GPS坐标距离自定义函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
#lng为经度,lat为纬度,一定不要弄错了哦
function distance($lat1$lng1$lat2$lng2){
    return (2*ATAN2(SQRT(SIN(($lat1-$lat2)*PI()/180/2)
    *SIN(($lat1-$lat2)*PI()/180/2)+
    COS($lat2*PI()/180)*COS($lat1*PI()/180)
    *SIN(($lng1-$lng2)*PI()/180/2)
    *SIN(($lng1-$lng2)*PI()/180/2)),
    SQRT(1-SIN(($lat1-$lat2)*PI()/180/2)
    *SIN(($lat1-$lat2)*PI()/180/2)
    +COS($lat2*PI()/180)*COS($lat1*PI()/180)
    *SIN(($lng1-$lng2)*PI()/180/2)
    *SIN(($lng1-$lng2)*PI()/180/2))))*6378140;
}

用法:

1
2
echo distance(39.91917,116.3896,39.91726,116.3940);
// 输出结果:431.65898565454

 
Mysql数据库中计算两GPS坐标的距离: http://aiezu.com/article/19.html
Javascript计算两个GPS坐标的距离: http://aiezu.com/article/17.html


作为一枚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/ext4api/#!/api/Ext

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的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。

三者区别及其使用场景

特性ActiveMQRabbitMQkafka
开发语言javaerlangscala
单机吞吐量万级万级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/中下载。

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

本文首发于公众号:Java版web项目


在看|星标|留言,  真爱

来源:

http://www.360doc.com/content/20/0613/14/49290572_918245894.shtml

所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大家可以一起研究源代码并对软件的进行优化和改进。越来越多的IT公司对开源持开放态度,一方面有了优秀的开源项目,就不用再重复造轮子,可以直接拿来使用;另一方面,自己公司有优秀的自研项目,为了发展壮大可以选择将项目开源,让更多的开发者参与进来,一起努力提升软件的功能!近些年来,国内很多大型IT公司也逐渐推出了一些高质量的开源项目,比如华为开源了鸿蒙系统、腾讯开源了自研的顶级数据库TBase、 阿里开源了自研的科学计算引擎Mars等。

下面,我们先大概的回顾一下红帽公司发布的企业开源现状的调查报告,然后简单的介绍一下最受IT公司青睐的一些开源项目。这些主要是面向企业的应用软件项目,涵盖Web服务器、大数据、云计算、云存储、操作系统、数据库等几大类别。

红帽发布2019年企业开源调查报告

开源技术已被广泛应用于企业中,这一点毋庸置疑。像谷歌和微软这样的科技巨头也承认开源的力量——谷歌云最近与 MongoDB、redis Labs、Neo4j 和Confluent 等公司建立合作伙伴关系便是很好的佐证。但这些企业如何看待开源?为什么选择开源?它们关于开源的下一步打算又是什么?基于以上疑问,红帽发起了“企业开源状态”调查,并于 2019年4 月16日发布了调查报告。

这份报告是对世界各地 950 位 IT 领导者进行访谈后的成果,调查区域包括美国、英国、拉丁美洲及亚太地区,旨在了解不同地理区域的企业开源概况。

企业是否认为开源具有战略性意义?这是红帽最先抛出并且最希望了解的一个问题。

调查结果显示,950 位受访者中,绝大多数人认为开源对企业整体的基础架构软件战略具有战略重要性。事实上,超过 69% 的人表示这非常或极其重要。

另外,在过去的 12 个月中,68% 的企业增加了对企业开源的使用,超过 59% 的企业预计在未来 12 个月内将继续使用企业开源。

今时今日,企业开源也可以取代专有软件,用于从虚拟化到消息总线再到应用服务器等许多不同目的。开源还有助于定义和塑造从容器化到软件定义存储和网络的基础架构的新方法。

其中,使用开源技术达成基础架构现代化和应用现代化的企业占比分别为 53% 和 42%。

不过,开源软件不仅仅是为了替换旧的基础设施。42% 的受访者表示他们正在将其用于数字化转型,具体主要应用于大数据分析和数据库管理。这一趋势不容小觑。

开源的独特之处在于,它使个人和组织能够以最小的障碍进行协作,实现共同目标。

现如今许多新类别的软件都受到开源技术的影响。人工智能、软件定义的基础架构和云原生平台就是一些很好的例子。

当今软件世界的许多创新都是在开源的情况下发生的,依赖软件来支持其业务的组织都希望能够利用这一创新。

正如红帽 CEO Jim Whitehurst 在调查报告开篇所讲:“这个时代发生的最激动人心的技术创新正在开源社区形成”。

Part1 web服务器

1、Nginx

Nginx (engine x) 是俄罗斯人开发出来的一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,Nginx的并发能力在同类型的网页服务器中表现较好,很多人使用Nginx来做负载均衡器和web反向代理。

  • 支持的操作系统:windows、linux 和 OS X

  • 相关网站:https://nginx.org

2、Lighttpd

Lighttpd是一个轻量级的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。广泛的应用于一些嵌入式的web服务器上。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://www.lighttpd.net/

3、Tomcat

Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,主要用于运行JSP 页面和Servlet。因为Tomcat 技术先进、性能稳定,而且免费,因而深受JAVA 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://tomcat.Apache.org

4、Apache HTTP Server

Apache HTTP Server(简称Apache),是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其具有的跨平台性和安全性,被广泛使用,是自 1996 年以来互联网上最受欢迎的 Web 服务器系统。据称,目前所有网站中 55.3% 是由 Apache 支持的。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://httpd.apache.org

Part2 大数据与云计算

5、Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop开发工具、开源软件、商业化工具和技术服务,Hadoop已经成为大数据的标配框架。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:http://hadoop.apache.org

6、Docker

Docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署,广泛的被应用于大数据的领域中。基本上做大数据的公司都会使用到该工具。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://www.docker.com

7、Spark

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark类似于Hadoop MapReduce的通用并行框架。Apache Spark 声称,“它在内存中运行程序的速度比 Hadoop MapReduce 最多快 100 倍,在磁盘上快 10 倍。Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:http://spark.apache.org

8、Storm

Storm是一个Twitter开源的分布式实时大数据处理系统,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://storm.apache.org

9、Cloud Foundry

Cloud Foundry是业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。它声称“由行业领袖为行业领袖构建”,其支持者包括 IBM、 Pivotal、惠普企业、VMware、英特尔、SAP 和 EMC。

  • 支持的操作系统:与系统无关

  • 相关网站:https://www.cloudfoundry.org

10、CloudStack

CloudStack是一个开源的具有高可用性及扩展性的云计算平台,同时是一个开源云计算解决方案。可以加速高伸缩性的公共和私有云(IaaS)的部署、管理、配置。使用CloudStack作为基础,数据中心操作者可以快速方便的通过现存基础架构创建云服务。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://cloudstack.apache.org

11、OpenStack

OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空航天局)和Rackspace合作研发并发起,授权的开源代码项目。OpenStack为私有云和公有云提供可扩展的弹性的云计算服务。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。这种很受欢迎的云计算平台声称,“世界上成百上千个大品牌”每天依赖它。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://www.openstack.org

Part3 云存储

12、Gluster

GlusterFS是一个可高度扩展、可伸缩的分布式文件系统,适用于云存储和媒体流等数据密集型任务。实现了全部标准POSIX接口,并用fuse实现虚拟化,让用户看起来就像是本地磁盘一样。能够处理千数量级的客户端。

  • 支持的操作系统:Linux、Windows

  • 相关网站:https://www.gluster.org

13、FreeNAS

FreeNAS是一套免费开源的NAS服务器,它能将一部普通PC变成网络存储服务器。该软件基于FreeBSD,Samba 及php,支持CIFS (samba), FTP, NFS protocols, Software RAID (0,1,5) 及 web界面的设定工具。用户可通过Windows、macs、FTP、SSH 及网络文件系统 (NFS) 来访问存储服务器;FreeNAS可被安装于硬盘或移动介质USB Flash Disk上。FreeNAS 服务器前途无量;它是组建简单网络存储服务器的绝佳选择

  • 支持的操作系统:与系统无关

  • 相关网站:http://www.freenas.org

14、Lustre

Lustre是一个开源、分布式并行文件系统软件平台,具有高可扩展、高性能、高可用等特点。Lustre的构造目标是为大规模计算系统提供一个全局一致的POSIX兼容的命名空间,这些计算系统包括了世界上包含最强大的高性能计算系统。它支持数百PB数据存储空间,支持数百GB/s乃至数TB/s并发聚合带宽。一些最早采用它的用户包括美国的几大国家实验室:劳伦斯·利物莫尔国家实验室、桑迪亚国家实验室、橡树岭国家实验室和洛斯阿拉莫斯国家实验室。

  • 支持的操作系统:Linux

  • 相关网站:http://lustre.org

15、Ceph

Ceph是一种为优秀的性能、可靠性和可扩展性而设计的分布式文件系统,是最早致力于开发下一代高性能分布式文件系统的项目。随着云计算的发展,Ceph乘上了OpenStack的春风,进而成为了开源社区受关注较高的项目之一。

  • 支持的操作系统:Linux

  • 相关网站:https://ceph.com

Part4 操作系统

16、centos

CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS完全开源。

17、Ubuntu

Ubuntu也是开源的,也拥有庞大的社区力量,用户可以方便地从社区获得帮助,提供广受欢迎的Linux发行版,有多个版本:桌面版、服务器版、云版、手机版、平板电脑版和物联网版。声称用户包括亚马逊、IBM、维基百科和英伟达。

  • 相关网站:http://www.ubuntu.com/index_kylin

Part5 数据库

18、MySQL

MySQL是用C/C++编写的关系型数据库,自称是“世界上最流行的开源数据库”,备受众多互联网公司的青睐,除了免费社区版外,它还有多款收费版。虽然是免费开源的,但是其性能有足够的保证,国内很多IT公司都在使用MySQL。

  • 支持的操作系统:Windows、Linux、Unix 和 OS X

  • 相关网站:https://www.mysql.com

19、PostgreSQL

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统。国内知名的华为高斯数据库和腾讯的TBase数据库均是在该数据库的基础上发展而来的。国内最牛的阿里OceanBase数据库所有代码都是自主研发的,虽然不是PostgreSQL基础上开发出来的,但应该也借鉴了PostgreSQL的很多特性和有点。

  • 支持的操作系统:Windows、Linux、Unix 和 OS X

  • 相关网站:https://www.postgresql.org

20、MongoDB

MongoDB 是一种 NoSQL 数据库,是一个基于分布式文件存储的数据库。由C++语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库。用户包括 Foursquare、《福布斯》、Pebble、Adobe、领英、eHarmony 及其他公司。提供收费的专业版和企业版。

  • 支持的操作系统:Windows、Linux、OS X 和 Solaris

  • 相关网站:https://www.mongodb.org

21、Cassandra

这种 NoSQL 数据库由 Facebook开发,其用户包括苹果、欧洲原子核研究组织(CERN)、康卡斯特、电子港湾、GitHub、GoDaddy、Hulu、Instagram、Intuit、网飞、Reddit及其他科技公司。它支持极其庞大的数据集,声称拥有非常高的性能和出色的耐用性和弹性。可通过第三方获得支持。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://cassandra.apache.org

22、CouchDB

CouchDB是用Erlang开发的面向文档的数据库系统,这种 NoSQL 数据库将数据存储在 JSON 文档中,这类文档可通过 HTTP 来加以查询,并用 JavaScript 来处理。CouchDB现在归 IBM 所有,它提供一款专业人员支持的软件版本,用户包括:三星、Akamai、Expedia、微软游戏工作室及其他公司。

  • 支持的操作系统:Windows、Linux、OS X 和 Android

  • 相关网站:https://couchdb.apache.org 

23、Neo4j

Neo4J一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,自诩为“世界上领先的图形数据库”,用于欺诈检测、推荐引擎、社交网站、主数据管理及更多领域。用户包括电子港湾、沃尔玛、思科、惠普、埃森哲、CrunchBase、eHarmony、Care.com 及另外许多企业组织。

  • 支持的操作系统:Windows 和 Linux

  • 相关网站:https://neo4j.com

Part6 开发工具和组件

24、Bugzilla

Bugzilla 是开源社区的宠儿,用户包括 Mozilla、Linux 基金会、GNOME、KDE、Apache、Libreoffice、Open Office、Eclipse、红帽、Novell及其他公司。这款软件缺陷追踪系统(bugtracker)的重要功能包括:高级搜索功能、电子邮件通知、预定报告、时间追踪、出色的安全及更多特性。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://www.bugzilla.org

25、Eclipse

Eclipse 项目最为知名的是,它是一种大受欢迎的面向 Java 的集成开发环境(IDE),它还提供面向C/C++和 PHP 的 IDE,此外提供另外一大批开发工具。主要支持者包括冠群科技、谷歌、IBM、甲骨文、红帽和 SAP。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://www.eclipse.org

26、Ember.js

Ember.js是一个开源的JavaScript客户端框架,用于开发Web应用程序并使用MVC架构模式,这种框架用于“构建野心勃勃的 Web 应用程序”,旨在为 JavaScript 开发人员提高工作效率。官方网站上显示用户包括雅虎、Square、Livingsocial、Groupon、Twitch、TED、网飞、Heroku 和微软。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://emberjs.com

27、Node.js

Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言,它让开发人员可以使用 JavaScript,编写服务器端应用程序。开发工作之前由 Joyent 管控,现在交由 Node.js 基金会监管。用户包括 IBM、微软、雅虎、SAP、领英、贝宝和网飞。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://nodejs.org/en/

28、React Native

React Native 由 Facebook 开发,这种框架可用于使用 JavaScript 和 React JavaScript 库(同样由 Facebook 开发),构建原生移动应用程序。其他用户包括:《探索》频道和 CBS 体育新闻网。

  • 支持的操作系统:OS X

  • 相关网站:https://facebook.github.io/react-native/

29、Ruby on Rails

Ruby on Rails是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。这个 Web 开发框架在开发人员当中极其流行,它声称“为确保编程员满意和持续高效地工作进行了优化”。用户包括 Basecamp、推特、Shopify 和 GitHub 等公司。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://rubyonrails.org

Part7 中间件

30、JBoss

JBoss是一个基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范,但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。JBoss中间件包括各种轻量级、对云计算友好的工具,同时结合、集成和自动化各个企业应用程序和系统。用户包括:橡树岭国家实验室、日产、思科、冠群科技、AMD 及其他公司。

  • 支持的操作系统:Linux

  • 相关网站:https://www.jboss.org/

更多开源介绍请关注:GitHub中文社区:

END

前线推出学习交流群和大厂面试真题,获取和加群一定要备注:

研究/工作方向+地点+学校/公司+昵称(如java+上海+上交+可可)根据格式备注,可更快被通过且邀请进群,领取一份专属学习礼包扫码加我微信进群,内推和技术交流,大佬们零距离

END

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

ps:后台回复 “面试“&”资料” 数百面试手册,即可领取程序员大礼包等你


蓝鲸智云体系架构

蓝鲸智云体系由八大平台组成,即管控平台、配置平台、作业平台、数据平台、容器管理平台、AI平台、PaaS平台和移动平台,为各种云(公有云、私有云、混合云)的用户提供不同场景、不同需求的一站式技术运营解决方案。

蓝鲸智云 PaaS 平台(社区版)架构

蓝鲸智云PaaS平台是一个开放的开发平台,让开发者可以简单、快速地创建、部署和管理应用,他提供了完善的前后台开发框架、API网关、调度引擎、公共组件等模块,帮助用户快速、低成本、免运维地构建支撑工具和运营系统(SaaS应用)。PaaS平台为一个SaaS应用从创建到部署,再到后续的维护管理提供了完善的自助化和自动化服务,从而使开发者可以将全部精力投入到SaaS应用的逻辑开发之中。PaaS平台的主要功能有:完善的开发框架/样例、免运维托管、API网关、前端服务(MagicBox)等。


学Java的兄弟姐妹,很大一部分要去做J2EE企业级项目,今天给大家介绍一款J2EE企业级解决方案开源系统

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。

项目在线演示地址:

http://47.93.195.63/zheng-upms-server/

该项目开源主页:

https://gitee.com/shuzheng/zheng


前言

zheng项目不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。

项目介绍

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块:内容管理、支付中心、用户管理(包括第三方)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。

组织结构

  • zheng

  • zheng-common -- SSM框架公共模块

  • zheng-admin -- 后台管理模板

  • zheng-ui -- 前台thymeleaf模板[端口:1000]

  • zheng-config -- 配置中心[端口:1001]

  • zheng-upms -- 用户权限管理系统

  • zheng-upms-common -- upms系统公共模块

  • zheng-upms-dao -- 代码生成模块,无需开发

  • zheng-upms-client -- 集成upms依赖包,提供单点认证、授权、统一会话管理

  • zheng-upms-rpc-api -- rpc接口包

  • zheng-upms-rpc-service -- rpc服务提供者

  • zheng-upms-server -- 用户权限系统及SSO服务端[端口:1111]

  • zheng-cms -- 内容管理系统

  • zheng-cms-common -- cms系统公共模块

  • zheng-cms-dao -- 代码生成模块,无需开发

  • zheng-cms-rpc-api -- rpc接口包

  • zheng-cms-rpc-service -- rpc服务提供者

  • zheng-cms-search -- 搜索服务[端口:2221]

  • zheng-cms-admin -- 后台管理[端口:2222]

  • zheng-cms-job -- 消息队列、任务调度等[端口:2223]

  • zheng-cms-web -- 网站前台[端口:2224]

  • zheng-pay -- 支付系统

  • zheng-pay-common -- pay系统公共模块

  • zheng-pay-dao -- 代码生成模块,无需开发

  • zheng-pay-rpc-api -- rpc接口包

  • zheng-pay-rpc-service -- rpc服务提供者

  • zheng-pay-sdk -- 开发工具包

  • zheng-pay-admin -- 后台管理[端口:3331]

  • zheng-pay-web -- 演示示例[端口:3332]

  • zheng-ucenter -- 用户系统(包括第三方登录)

  • zheng-ucenter-common -- ucenter系统公共模块

  • zheng-ucenter-dao -- 代码生成模块,无需开发

  • zheng-ucenter-rpc-api -- rpc接口包

  • zheng-ucenter-rpc-service -- rpc服务提供者

  • zheng-ucenter-web -- 网站前台[端口:4441]

  • zheng-wechat -- 微信系统

  • zheng-wechat-mp -- 微信公众号管理系统

  • zheng-wechat-mp-dao -- 代码生成模块,无需开发

  • zheng-wechat-mp-service -- 业务逻辑

  • zheng-wechat-mp-admin -- 后台管理[端口:5551]

  • zheng-ucenter-app -- 微信小程序后台

  • zheng-api -- API接口总线系统

  • zheng-api-common -- api系统公共模块

  • zheng-api-rpc-api -- rpc接口包

  • zheng-api-rpc-service -- rpc服务提供者

  • zheng-api-server -- api系统服务端[端口:6666]

  • zheng-oss -- 对象存储系统

  • zheng-oss-sdk -- 开发工具包

  • zheng-oss-web -- 前台接口[端口:7771]

  • zheng-oss-admin -- 后台管理[端口:7772]

  • zheng-message -- 实时通知系统

  • zheng-message-sdk -- 开发工具包

  • zheng-message-server -- 服务端[端口:8881,SocketIO端口:8882]

  • zheng-message-client -- 客户端

  • zheng-shop -- 电子商务系统

  • zheng-demo -- 示例模块(包含一些示例代码等)

  • zheng-demo-rpc-api -- rpc接口包

  • zheng-demo-rpc-service -- rpc服务提供者

  • zheng-demo-web -- 演示示例[端口:9999]</pre>

技术选型

后端技术:

网址已整理成文档请点击点击下方链接

网址链接shimo.im/docs/wP9txRcVRyDcQWKx

前端技术:

网址已整理成文档请点击点击下方链接

网址链接shimo.im/docs/wP9txRcVRyDcQWKx

架构图


模块依赖



模块介绍

zheng-common

Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。

zheng-admin

基于bootstrap实现的响应式Material Design风格的通用后台管理系统,zheng项目所有后台系统都是使用该模块界面作为前端展示。

zheng-ui

各个子系统前台thymeleaf模板,前端资源模块,使用nginx代理,实现动静分离。

zheng-upms

本系统是基于RBAC授权和基于用户授权的细粒度权限控制通用平台,并提供单点登录、会话管理和日志管理。接入的系统可自由定义组织、角色、权限、资源等。用户权限=所拥有角色权限合集+用户加权限-用户减权限,优先级:用户减权限>用户加权限>角色权限

zheng-oss

文件存储系统,提供四种方案:

  • 阿里云 OSS

  • 腾讯云 COS

  • 七牛云

  • 本地分布式存储



zheng-api

服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。示例图:



zheng-cms

内容管理系统:支持多标签、多类目、强大评论的内容管理,有基本单页展示,菜单管理,系统设置等功能。

zheng-pay
  • 一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。

  • 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统、系统监控。



zheng-ucenter

通用用户管理系统, 实现最常用的用户注册、登录、资料管理、个人中心、第三方登录等基本需求,支持扩展二次开发。

zheng-wechat-mp

微信公众号管理平台,除实现官网后台自动回复、菜单管理、素材管理、用户管理、消息群发等基础功能外,还有二维码推广、营销活动、微网站、会员卡、优惠券等。

zheng-wechat-app

微信小程序后台

zheng-message

基于Netty实现SocketIO的实时推送系统。支持命名空间、二进制数据、SSL、ACK等功能。

环境搭建

开发工具:

  • MySql: 数据库

  • jetty: 开发服务器

  • Tomcat: 应用服务器

  • SVN|Git: 版本管理

  • Nginx: 反向代理服务器

  • Varnish: HTTP加速器

  • IntelliJ IDEA: 开发IDE

  • PowerDesigner: 建模工具

  • Navicat for MySQL: 数据库客户端

开发环境:

  • Jdk7+

  • Mysql5.5+

  • Redis

  • Zookeeper

  • ActiveMQ

  • Dubbo-admin

  • Dubbo-monitor

工具安装

环境搭建和系统部署文档

资源下载

更多资源请点击点击下方链接

Java学习、面试;文档、视频资源免费获取shimo.im/docs/wP9txRcVRyDcQWKx


开发指南:

  • 1、本机安装Jdk7、Mysql、Redis、Zookeeper、ActiveMQ并启动相关服务,使用默认配置默认端口即可

  • 2、克隆源代码到本地并打开,推荐使用IntelliJ IDEA,本地编译并安装到本地maven仓库

修改本地Host

编译流程

maven编译安装zheng/pom.xml文件即可

启动顺序(后台)

准备工作
  • 新建zheng数据库,导入project-datamodel文件夹下的zheng.sql

  • 修改各dao模块和rpc-service模块的redis.properties、jdbc.properties、generator.properties数据库连接等配置信息,其中master.redis.password、master.jdbc.password、slave.jdbc.password、generator.jdbc.password密码值使用了AES加密,请使用com.zheng.common.util.AESUtil工具类修改这些值

  • 启动Zookeeper、Redis、ActiveMQ、Nginx(配置文件参考project-tools/nginx下的*.conf文件)

zheng-upms
  • 首先启动 zheng-upms-rpc-service(直接运行src目录下的ZhengUpmsRpcServiceApplication#main方法启动) => zheng-upms-server(jetty),然后按需启动对应子系统xxx的zheng-xxx-rpc-service(main方法) => zheng-xxx-webapp(jetty)



  • 访问 upms.zhangshuzheng.cn:1111,子系统菜单已经配置到zheng-upms权限中,不用直接访问子系统,默认帐号密码:admin/123456

  • 登录成功后,可在右上角切换已注册系统访问

zheng-cms
  • zheng-cms-admin:启动ActiveMQ-启动 => 启动zheng-rpc-service => 启动zheng-cms-admin

  • zheng-cms-web:启动nginx代理zheng-ui静态资源,配置文件可参考 nginx.conf

zheng-oss
  • 首先启动zheng-oss-web服务

  • 开发阶段,如果zheng-oss-web没有公网域名,推荐使用ngrok内网穿透工具,为开发环境提供公网域名,实现上传回调

  • 启动nginx代理zheng-ui静态资源

开发演示

  • 创建数据表(建议使用PowerDesigner)

  • 直接运行对应项目dao模块中的generator.main(),可自动生成单表的CRUD功能和对应的model、example、mapper、service代码

  • selectByExampleWithBLOBsForStartPage()

  • selectByExampleForStartPage()

  • selectByExampleWithBLOBsForOffsetPage()

  • selectByExampleForOffsetPage()

  • 生成的model和example均已实现Serializable接口,支持分布式

  • 已包含抽象类BaseServiceImpl,只需要继承抽象类并传入泛型参数,即可默认实现mapper接口所有方法,特殊需求直接扩展即可

  • BaseServiceImpl默认已实现四种根据条件分页接口

  • BaseServiceImpl方法根据读写操作自动切换主从数据源,继承的扩展接口,可手动通过DynamicDataSource.setDataSource(DataSourceEnum.XXX.getName())指定数据源

  • 启动流程:优先rcp-service服务提供者,再启动其他webapp

  • 扩展流程:可扩展和拆分rpc-api和rpc-service模块,可按微服务拆分或场景拆分

部署方式

  • war包项目:使用tomcat等web容器启动

  • rpc-service服务提供者jar包:将打包后的zheng-xxx-rpc-service-assembly.tar.gz文件解压,使用bin目录的管理脚本运行即可,支持优雅停机。

框架规范约定

约定优于配置(convention over configuration),此框架约定了很多编程规范,下面一一列举:

  • service类,需要在叫名service的包下,并以Service结尾,如CmsArticleServiceImpl

  • controller类,需要在以controller结尾的包下,类名以Controller结尾,如CmsArticleController.java,并继承BaseController

  • spring task类,需要在叫名task的包下,并以Task结尾,如TestTask.java

  • mapper.xml,需要在名叫mapper的包下,并以Mapper.xml结尾,如CmsArticleMapper.xml

  • mapper接口,需要在名叫mapper的包下,并以Mapper结尾,如CmsArticleMapper.java

  • model实体类,需要在名叫model的包下,命名规则为数据表转驼峰规则,如CmsArticle.java

  • spring配置文件,命名规则为applicationContext-*.xml

  • 类名:首字母大写驼峰规则;方法名:首字母小写驼峰规则;常量:全大写;变量:首字母小写驼峰规则,尽量非缩写

  • springmvc配置加到对应模块的springMVC-servlet.xml文件里

  • 配置文件放到src/main/resources目录下

  • 静态资源文件放到src/main/webapp/resources目录下

  • jsp文件,需要在/WEB-INF/jsp目录下

  • RequestMapping和返回物理试图路径的url尽量写全路径,如:@RequestMapping("/manage")、return "/manage/index"

  • RequestMapping指定method

  • 模块命名为项目-子项目-业务,如zheng-cms-admin

  • 数据表命名为:子系统_表,如cms_article

  • 更多规范,参考[[阿里巴巴Java开发手册] git.oschina.net/shuzhen
    </pre>

演示地址

演示地址: upms.zhangshuzheng.cn/

预览图



数据模型

拓扑图

开发进度

参与开发

首先谢谢大家支持,如果你希望参与开发,欢迎通过Github上fork本项目,并Pull Request您的commit。

常见问题

  • Eclipse下,dubbo找不到dubbo.xsd报错,不影响使用,如果要解决,可参考 blog.csdn.net/gjldwz/ar

  • 报zheng-xxx.jar包找不到,请按照文档编译顺序,将源代码编译并安装到本地maven仓库

  • zheng-cms-admin启动卡住:因为没有启动activemq

  • zheng-upms-server访问报session不存在:因为没有启动redis服务

  • 界面没有样式:因为zheng-admin没有编译安装到本地仓库

  • linux下执行rpc-service脚本报“bin/bash^M 坏的解释器”,使用sed -i 's/\r$//' filename删除脚本中\r字符

作者:张恕征

感谢阅读,点个关注呗