Spring框架
Spring核心框架自从诞生以来,一直都是最主流的框架之一,它提供了管理 Bean 对象的容器,省去了我们自己去 new 对象,只要通过简单的依赖注入就可以引入想使用的对象。这是 Spring 的核心功能之一的 IOC(控制反转),它的作用就是帮我们管理对象,省去了自己创建对象,而是由 Spring 来自动进行装配。
Spring还提供了另一个核心功能 AOP(面向切面编程的思想),通过动态代理来实现对一些切面功能的处理来降低耦合,比如统一的异常处理、日志处理、权限校验等等。
Spring拥有一个很大的开发生态圈,很多框架都能通过简单地配置和Spring 共同使用,大大方便了我们进行开发。
SpringMVC
SpringMVC是一个使用了 MVC 分层模式的 Web 框架,它底层其实就是一个 Servlet,接收并处理请求,然后返回响应。
MVC 分层架构主要分为:
- Model 层是对应用程序数据的一个封装;
- View 层负责展示应用程序返回的数组;
- Contorller 层负责处理用户请求,并建立对应的模型,然后做渲染。
MyBatis
MyBatis是一个对象关系映射(Object Relational Mapping)框架。它主要关注对象与数据库之间的映射,框架会屏蔽操作数据库的细节,然后把数据库返回的数据封装成对象,我们在应用中直接操作对象就行了。
也因为MyBatis框架的特性:逻辑代码和SQL分离,所以需要自己手写 SQL,这既是缺点也是优点吧。说它是缺点是因为还需要我们自己写 SQL,优点呢就是我们可以对 SQL 进行定制化,比较自由。而且现在有很多插件可以实现对定义好的数据库自定义生成对应的 SQL,如果有自定义 SQL 的需求,只要在 XML 文件中修改就好。总之,它方便了我们对数据库的操作。
上面介绍的 Spring、SpringMVC和Mybatis就是常用的SSM框架集。
SpringBoot
Spring全家桶之一的SpringBoot,是一个快速开发的框架,通过引入项目依赖快速引入第三方框架,并且它通过引入大量的注解来简化XML的配置。它的主要功能就是为了简化开发过程中的成本,快速引入依赖、简化因使用配置带来的复杂度、简洁打包运行,一个字就是快!
SpringCloud
SpringCloud框架为构建分布式系统提供了一套完整的微服务解决方案,它提供了如下组件:
- Eureka:用于服务的注册发现;
- Ribbon/Feign:提供负载均衡;
- Hystrix:防止过载的断路器;
- Config:配置中心;
- Zuul:网关。
SpringCloud不断在完善及增加这些功能,是一个开发过程中的利器。
Dubbo
Dubbo是阿里巴巴研发的一款开源的 RPC 远程调用框架。现在很多公司都在使用微服务、分布式架构,也就是由之前的单体应用拆分成多个服务,然后服务之间进行调用。为了使消费端对服务端的调用透明化,就有了 RPC 框架,很多公司都在使用 Dubbo 来搭建微服务。
Dubbo 使用 SPI 机制实现了插件的可插拔,你可以自由扩展它提供的功能。同时它还提供了丰富的协议支持、丰富的负载均衡策略。在最新的版本中,Dubbo 对异步调用也做了很好的支持。总之,Dubbo 是一款优秀的 RPC 框架。
Netty
Netty是一个异步驱动的网络应用框架,用于快速开发可维护、高性能的服务器和客户端。很多 RPC 框架的的通信层都采用的是 Netty,上面介绍的 Dubbo 框架默认的 dubbo 协议就是采用 Netty 作为其通信框架。
Netty 的高性能取决于其 I/O 模型和线程模型。I/O 模型采用了 I/O 多路复用,虽然也是调用 select 方法,虽然会阻塞线程,但不会阻塞 I/O ,它会同时检查多个写和多个读,只有在有数据就绪时,才会调用真正的 I/O 操作。
Netty 还解决了粘包/拆包问题,还支持零拷贝等等。
总之,Netty 是一个高性能的网络框架。
SkyWalking
SkyWalking是一个APM(Application Performance Management,应用性能管理) 框架,在微服务盛行的时代,它可以做到服务调用链路的追踪,是一个监控服务性能的利器。
SkyWalking 基于 OpenTracing 规范,Java 探针采用了字节码增强技术实现,对业务代码无侵入,而且社区非常活跃,支持多语言,是一款很好的 APM 框架。
ZooKeeper
ZooKeeper是一个分布式协调框架,提供统一命名服务、配置管理、数据发布/订阅、负载均衡、分布式协调/通知、分布式锁等分布式的基础服务。ZooKeeper 采用了 ZAB 协议来解决分布式数据的一致性。在应用方面,Dubbo 的服务注册中心就是采用的 ZooKeeper,其用途也是非常广泛。
canal
canal也是阿里巴巴研发的一款基于 MySQL 数据库增量日志解析的框架,主要提供增量数据订阅和消费。canal 的工作原理是模拟 MySQL slave 的交互协议,伪装自己是 MySQL 的 slave,向 master 发送 dump 协议,等 master 收到 dump 协议后,会把 binlog 日志传给 canal ,然后 canal 就可以解析 binlog 日志了。该框架一般用于同步 MySQL 的数据,现在还支持把消息发送到 Kafka 中,然后由使用方订阅 topic 进行消费。
Vert.x
Vert.x是一款异步框架,基于 Netty 实现,通过事件循环(Event Loop)来调用存储在异步任务队列的任务,能够极大地提高系统的吞吐量,它还有一个特点是无锁化。
Elasticsearch
Elasticsearch是一款分布式可扩展的实时搜索和分析引擎,底层基于 Lucene 开发。该框架可以用于分布式实时文件存储、分布式搜索引擎等。Elaticsearch 的倒排索引被很多广告公司用到了广告库检索上,同时 Elaticsearch + Logstash + Kibana 可以搭建日志分析系统,即 ELK。
非Java语言开发的框架
Redis
Redis是一款基于C语言开发的 key-value 存储系统,一般用作缓存、分布式锁、消息队列,也支持持久化数据到磁盘上。
Redis 支持多种数据类型,例如字符串、哈希、列表、集合和有序集合、位图、HyperLogLog 等类型。
Redis 支持 RDB 和 AOF 两种持久化方式,也有对键的过期策略。Redis 还支持事务、LUA 脚本等特性。
Redis 通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。
Redis 在工作中常用于实现分布式缓存和分布式锁。