最近,我简单完善了一下之前总结的 Java 最常用的一些框架和开源项目。
发这篇文章的起因是看到知乎有个类似的问题,然后感觉高赞的回答不是很让人满意,获得这么高的点赞也是让我很迷。
目前,我已经将下面的内容同步到 Github ,阅读原文即可直达:https://github.com/Snailclimb/awesome-java (整理收集不易,花了不少心思,觉得不错就给个 star 吧!ღ( ´・ᴗ・` )比心)。
欢迎补充完善,一起打造一个最棒的 Java 开源项目集合!
微服务下一个系统被拆分为多个服务,但是像 安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。
综上:一般情况下,网关一般都会提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、容灾、日志、监控这些功能。
上面介绍了这么多功能实际上网关主要做了一件事情:请求过滤 。权限校验、流量控制这些都可以通过过滤器实现,请求转也是通过过滤器实现的。
微服务下,业务的发展一般会导致服务数量的增加,进而导致程序配置(服务地址、数据库参数等等)增多。
传统的配置文件的方式已经无法满足当前需求,主要有两点原因:一是安全性得不到保障(配置放在代码库中容易泄露);二是时效性不行 (修改配置需要重启服务才能生效)。
除了 Apollo 和 Spring Cloud Config 之外,Spring Cloud Alibaba 中的 Nacos 组件也可以提高配置功能。
相关阅读:微服务架构中配置中心的选择:Apollo VS Spring Cloud Config[15]
目前分布式链路追踪系统基本都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展而来,主流的有 Pinpoint,Skywalking ,CAT(当然也有其他的例如 Zipkin,Jaeger 等产品,不过总体来说不如前面选取的 3 个完成度高)等。
相关阅读:Skywalking 官网对于主流开源链路追踪系统的对比[19]
我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。
使用消息队列主要有两点好处:一是通过异步处理提高系统性能(削峰、减少响应所需时间);二是降低系统耦合性。
任务调度/定时任务在系统中应用太广泛了。为什么需要任务调度/定时任务呢?
这类框架也比较多,下面就带大家看看!
quartz
开发的,比如当当网的elastic-job
就是基于quartz
二次开发之后的分布式调度解决方案相关阅读:Spring Job、Quartz、XXL-Job 对比+全解析
数据库对于全文检索不太友好,这种事情最好交给搜索引擎来做,比如电商系统的商品搜索往往都是基于搜索引擎来做的。
Elasticsearch 在搜索引擎数据库领域排名绝对第一,内核基于 Lucene 构建,支持全文搜索是职责所在,提供了丰富友好的 API。
Elasticsearch 除了做搜索引擎,还常常被拿来做日志检索(著名的 ELK 三件套,讲的就是 Elasticsearch,Logstash,Kibana,专门针对日志采集、存储、查询设计的产品组合,相关阅读:什么是 ELK Stack?[29])。
Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 Elasticsearch。
数据库的数据量大了之后就要考虑读写分离、分库分表,但是一定要尽量能避免分库分表就避免,因为会带来很多其他问题。
相关阅读:数据库中间件详解(精品长文)[37]
实际项目中使用 ELK 三件套(Elasticsearch,Logstash,Kibana)来做日志系统的非常多。
另外,像 Prometheus + Grafana 也是比较主流的,相关阅读:Prometheus + Grafana 监控配置指北:打造专属监控系统[53] 。
Loki
是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs.
,类似于 Prometheus 的日志系统。相关阅读:为了能让我们编写的系统更加健壮,必要的测试(UI 测试、单元测试...)是必须的。
相关阅读:
相关阅读:
[1]
spring-boot: https://github.com/spring-projects/spring-boot
[2]
spring-cloud-alibaba: https://github.com/alibaba/spring-cloud-alibaba
[3]
Sentinel: https://github.com/alibaba/Sentinel
[4]
dubbo: https://github.com/apache/dubbo
[5]
nacos: https://github.com/alibaba/nacos
[6]
seata: https://github.com/seata/seata
[7]
RocketMQ: https://github.com/apache/rocketmq
[8]
kong: https://github.com/Kong/kong
[9]
soul: https://github.com/Dromara/soul
[10]
Spring Cloud Gateway: https://github.com/spring-cloud/spring-cloud-gateway
[11]
Zuul: https://github.com/Netflix/zuul
[12]
apollo: https://github.com/ctripcorp/apollo
[13]
Spring Cloud Config: https://github.com/spring-cloud/spring-cloud-config
[14]
Consul: https://github.com/hashicorp/consul
[15]
微服务架构中配置中心的选择:Apollo VS Spring Cloud Config: https://www.jianshu.com/p/d78fa8412cbf
[16]
skywalking: https://github.com/apache/skywalking
[17]
zipkin: https://github.com/openzipkin/zipkin
[18]
cat: https://github.com/dianping/cat
[19]
Skywalking 官网对于主流开源链路追踪系统的对比: https://skywalking.apache.org/zh/blog/2019-03-29-introduction-of-skywalking-and-simple-practice.html
[20]
RocketMQ: https://github.com/apache/rocketmq
[21]
Kafaka: https://github.com/apache/kafka
[22]
Kafka入门看这一篇就够了: https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/data-communication/Kafka入门看这一篇就够了.md
[23]
RabbitMQ: https://github.com/rabbitmq
[24]
Quartz: https://github.com/quartz-scheduler/quartz
[25]
XXL-JOB: https://github.com/xuxueli/xxl-job
[26]
Elastic-Job: http://elasticjob.io/index_zh.html
[27]
EasyScheduler: https://github.com/analysys/EasyScheduler
[28]
PowerJob: https://gitee.com/KFCFans/PowerJob
[29]
什么是 ELK Stack?: https://www.elastic.co/cn/what-is/elk-stack
[30]
elasticsearch: https://github.com/elastic/elasticsearch
[31]
Solr: https://lucene.apache.org/solr/
[32]
Druid: https://github.com/alibaba/druid
[33]
HikariCP: https://github.com/brettwooldridge/HikariCP
[34]
ShardingSphere: https://github.com/apache/shardingsphere
[35]
https://shardingsphere.apache.org/document/current/cn/overview/: https://shardingsphere.apache.org/document/current/cn/overview/
[36]
MyCat: https://github.com/MyCatApache/MyCat2
[37]
数据库中间件详解(精品长文): https://zhuanlan.zhihu.com/p/87144535
[38]
redisson: https://github.com/redisson/redisson
[39]
Redisson: https://redisson.org/
[40]
Redis: http://redis.cn/
[41]
Redisson项目介绍: https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D
[42]
MyBatis-Plus: https://github.com/baomidou/mybatis-plus
[43]
MyBatis-Plus: https://github.com/baomidou/mybatis-plus
[44]
MyBatis: http://www.mybatis.org/mybatis-3/
[45]
DataX: https://github.com/alibaba/DataX
[46]
canal: https://github.com/alibaba/canal
[47]
dynamic-datasource-spring-boot-starter: https://github.com/baomidou/dynamic-datasource-spring-boot-starter]
[48]
Spark: https://github.com/apache/spark
[49]
flink: https://github.com/apache/flink
[50]
HBase: https://hbase.apache.org/
[51]
Flume: https://flume.apache.org/
[52]
Storm: https://storm.apache.org/
[53]
Prometheus + Grafana 监控配置指北:打造专属监控系统: https://counter2015.com/2020/04/13/grafana-monitor-2/
[54]
loki: https://github.com/grafana/loki
[55]
Loki 日志系统: https://www.cnblogs.com/xiao987334176/p/13187473.html
[56]
使用 Loki 进行日志监控和报警: https://www.qikqiak.com/post/use-loki-monitor-alert/
[57]
WxJava: https://github.com/Wechat-Group/WxJava
[58]
JUnit: http://junit.org/
[59]
Mockito: https://github.com/mockito/mockito
[60]
PowerMock: https://github.com/powermock/powermock
[61]
WireMock: https://github.com/tomakehurst/wiremock
[62]
The Practical Test Pyramid- Martin Fowler: https://martinfowler.com/articles/practical-test-pyramid.html
[63]
浅谈测试之 PowerMock: https://juejin.im/post/6844903982058618894
[64]
Deeplearning4j: https://github.com/eclipse/deeplearning4j
[65]
Smile: https://github.com/haifengl/smile
[66]
Java 能用于机器学习和数据科学吗?-InfoQ: https://www.infoq.cn/article/GA9UeYlv8ohBzBso9eph
[67]
Deeplearning4j 入门 - IBM Developer: https://developer.ibm.com/zh/technologies/artificial-intelligence/articles/cc-get-started-deeplearning4j/
[68]
Jenkins: https://github.com/jenkinsci/jenkins