web项目部分框架技术
以下技术都是平时工作中和自己学习中所了解并尝试使用的部分技术,作为记录。
写这份清单的起因很简单:Java Web 的生态太大了,从一个单体项目起步,到微服务、容器化、监控告警,每个环节都有好几个可选方案。平时零散接触,过一阵子就只记得名字、想不起定位。所以把它们集中记在一处,每一项写清楚"是什么、解决什么问题",以后做技术选型时可以直接翻这一页,而不是重新去搜。清单大致按"开发框架 → 数据层 → 微服务治理 → 基础设施 → 大数据与工具"的顺序排列。
SpringBoot ,Spring-cloud,Spring-cloud-alibaba,Spring全家桶。SpringBoot 用自动装配和起步依赖把配置量压到最低,是现在 Java 项目的默认起点;Spring Cloud 在它之上提供服务注册、配置、网关等微服务能力;Spring Cloud Alibaba 则把 Nacos、Sentinel、Seata 这些国内生态组件接入了同一套抽象。
MyBatis-Plus (乐观锁,自动分页,代码生成器,生成service,mapper,entity,controller,自定义生成模板)。它在 MyBatis 之上补齐了通用 CRUD,单表操作基本不用写 SQL;代码生成器配合自定义模板,新建一张表的增删改查几分钟就能搭出来。
JOOQ:JavaORM框架。思路和 MyBatis 相反——用 Java DSL 以类型安全的方式拼 SQL,编译期就能发现字段写错,适合 SQL 逻辑复杂、又想要强类型保障的场景。
Uid-generator : 百度uid生成器 (分布式雪花算法全局唯一标示,Long型UID)。分库分表之后数据库自增主键没法用了,雪花算法用"时间戳 + 机器位 + 序列号"拼出趋势递增的 Long 型 ID,既全局唯一又对索引友好。
Xxl-job:分布式任务调度中心。解决的是单机定时任务的两个老问题:机器挂了任务就丢、多实例部署会重复执行。它把调度中心和执行器分离,自带管理界面、失败重试和分片执行。
Apache-Shiro, Spring-Security :登录安全框架。两者都覆盖认证和授权,Shiro 轻量、上手快;Spring Security 功能更全、与 Spring 生态结合更深,但配置曲线也更陡。
Druid ali , HikariCP :常用数据连接池。连接池的意义在于复用数据库连接、避免频繁握手。Druid 附带 SQL 监控和防注入统计页面,HikariCP 以性能见长,是 SpringBoot 的默认选择。
Bcrypt :数据库用户密码加密方式,保证密码安全。它是慢哈希,且每次加盐结果不同,即使库被拖走也难以用彩虹表批量反解,比 MD5/SHA 直接存哈希靠谱得多。
JWT:临时令牌生成策略/规范。把用户信息签名后放进令牌本身,服务端不用存会话,天然适合多实例横向扩展;代价是签发后无法主动作废,只能靠短有效期或黑名单兜底。
Undertow ,Tomcat,Jboss,Weblogic :Servlet容器。Tomcat 最通用;Undertow 基于 NIO、内存占用小,常用来替换 SpringBoot 内嵌容器;JBoss、Weblogic 属于更重的商用应用服务器。
Eolinker,Swagger,Knife4j,Yapi : 在线api文档 自动化测试工具。核心价值是让文档从代码注解自动生成、跟随代码更新,避免"文档和接口对不上"这种前后端扯皮的经典问题;Knife4j 是 Swagger 的国产增强皮肤。
MySQL 8.0 ,PostgreSQL : RDS 关系型数据库。业务数据的主存储。MySQL 生态和资料最丰富;PostgreSQL 功能更完整,JSON、GIS 这类场景表现更好。
Sqlite 嵌入式数据库。整个库就是一个文件,不需要独立进程,适合客户端本地存储和小工具。
Redis,MongoDB : NoDB 非关系型数据库。Redis 基于内存,常用作缓存、分布式锁和计数器;MongoDB 是文档型数据库,模式灵活,适合结构多变的数据。
Dobbo ,Feign : 远程方法调用。都是让跨服务调用写起来像本地方法。Dubbo 走自定义协议 + 长连接,性能好;Feign 基于 HTTP,声明式接口,和 Spring Cloud 体系搭配更自然。
Sentinel , Hystrix : 限流,降级。微服务的自保手段:上游流量超出承载能力时先限流,依赖的下游挂了就快速失败并走降级逻辑,避免线程被拖死后故障沿调用链扩散——也就是所谓的雪崩。Hystrix 已停止新功能开发,新项目一般选 Sentinel。
Skywalking 链路追踪(华为开发已捐赠apache)。通过 Java Agent 字节码增强埋点,不侵入业务代码,就能把一次请求跨多个服务的完整调用链画出来,排查"慢在哪一环"时非常直观。
Zookeeper,Eureka,Consul ,Nacos ,Etcd :注册,配置中心。注册中心解决"服务实例地址动态变化,调用方如何找到它"的问题;配置中心解决"改配置要重启"的问题。Nacos 把两者合一,是 Spring Cloud Alibaba 体系的默认选择;Etcd 则是 Kubernetes 的底层存储。
Seata: 阿里分布式事物解决方案。一次业务操作跨了多个库或多个服务时,本地事务保证不了整体一致性。Seata 的 AT 模式通过代理数据源自动记录回滚日志,对业务代码侵入很小。
ELK :分布式日志抓取,数据聚合,分布式搜索引擎。即 Elasticsearch + Logstash + Kibana 的组合:采集各节点日志集中存储,再用全文检索和可视化界面查询。服务一多,没有集中式日志基本没法排查问题。
Micrometer , Prometheus , Grafana :服务健康监控,数据监控,io监控等。Micrometer 在应用侧暴露指标,Prometheus 定时拉取并存成时序数据,Grafana 负责画图和告警面板,三者是目前最常见的监控组合。
Kafka,RabbitMQ ,RocketMQ : 常用消息队列,削峰,解耦,异步。生产者只管投递、消费者按自己的节奏处理,流量洪峰先落到队列里慢慢消化。Kafka 吞吐最高、偏日志和流处理场景;RabbitMQ 路由灵活;RocketMQ 在事务消息、延时消息上功能更全。
Nginx ,apache-http-service ,Traefik : http服务器。除了静态资源托管,更多时候承担反向代理和七层负载均衡;Traefik 能自动发现容器并更新路由规则,和容器环境更配。
Ali-OSS,HUAWEI-OBS : 第三方静态资源存储。图片、附件这类文件放对象存储而不是应用服务器磁盘,既省心又方便配合 CDN 加速。
Ali-NAS :内网共享文件存储挂载,内网共享磁盘。多台机器需要读写同一份文件时挂 NAS,比自己搭 NFS 少不少运维工作。
Ali-SLB : 4,7层负载均衡器。流量入口的第一层,四层转发 TCP、七层能按域名和路径分流,通常再往后才到 Nginx 和应用。
Findbugs,Sonarqube : 静态代码检测。不运行代码就能扫出空指针隐患、资源未关闭这类问题;SonarQube 还能接进 CI,用质量门禁挡住不达标的提交。
PDMan : 国人开发的数据库可视化工具。用来画 ER 图、维护表结构版本,导出建表 SQL,团队协作时比口头约定表结构靠谱。
Docker,Containerd,CRI-O : 常见几种容器运行时。容器把应用和依赖打成一个镜像,"在我机器上能跑"的问题基本消失。Containerd、CRI-O 是更底层的运行时,Kubernetes 通过 CRI 接口直接对接它们。
Docker-Compose :容器编排工具。一个 YAML 文件描述多个容器的镜像、端口、依赖关系,一条命令拉起整套本地环境,开发联调很方便。
Kubernetes :容器编排,运维,资源管理,资源调度,一站式管理。核心思想是声明式:你描述期望状态,它负责调度、扩缩容和故障自愈,让实际状态不断向期望收敛。是目前生产容器编排的事实标准。
Istio:常用 service-mech 框架,可多语言协同开发后端架构,流量控制,降级,熔断。Service Mesh 把限流、熔断、灰度这些治理逻辑从业务代码下沉到 Sidecar 代理里,不同语言写的服务都能共享同一套治理能力。
Helm:K8S应用资源管理中间件。相当于 Kubernetes 的包管理器,把一堆 YAML 模板化成 Chart,一条命令完成安装、升级和回滚。
Ali-EsayExcel:阿里开源excel高效jar包。针对 POI 大文件容易内存溢出的问题做了流式读写优化,导入导出几十万行也比较稳。
Netty : 常用 JavaNIO 网络编程包。把 NIO 繁琐的 Selector、Buffer 细节封装成事件驱动的 Pipeline 模型,是很多 RPC 框架和中间件的网络层地基。
Disruptor : 高性能内存队列(英国外汇交易公司LMAX开发)。用环形数组预分配内存、避免锁竞争和伪共享,单机线程间传递消息的延迟可以压得非常低。
Caffeine : JVM本地高性能缓存组件。底层使用 Disruptor 开发。进程内缓存,访问不走网络,常和 Redis 组成两级缓存:本地挡热点,Redis 保共享。
Jenkins CI/CD中间件,自动化发布,流水线生产。把拉代码、编译、测试、打镜像、部署串成流水线,提交代码后自动跑完,减少手工发布的出错空间。
Apahce-Hdoop:分布式,大数据存储,与数据处理。Hadoop 的 HDFS 把大文件切块冗余存到多台机器,MapReduce 负责在数据所在节点就近计算,是大数据体系的老底座。
Apahce-Flink:流式处理框架,适合大数据中进行准实时计算。把计算下推到数据流上,事件到达即处理,支持状态管理和精确一次语义,实时报表、实时风控常用它。
MyCat2、Apache-Shardingsphere :分库分表中间件。单表数据量大到查询扛不住时做水平拆分,中间件负责解析 SQL、路由到具体分片并合并结果,让应用尽量无感。
TiDB,KunlunBase:NewSQL 分布式关系型数据库。换一个思路解决同样的问题:数据库自身分布式化,兼容 MySQL 协议,扩容不再需要业务侧改造分片规则。
Arthas:阿里开源JVM诊断工具,火焰图生成,死锁诊断等。不重启、不改代码就能挂到线上 JVM 上看方法耗时、反编译类、追踪调用,排查线上疑难问题的救命工具。
Kettle,DataX,Canal:开源ETL工具,数据迁移,数据清洗。前两者做批量抽取转换;Canal 比较特别,它伪装成 MySQL 从库解析 binlog,能拿到实时增量数据,常用于缓存同步和异构数据同步。
Jmeter:常用接口测试,压测工具。上线前先压一轮,摸清接口的吞吐上限和响应时间分布,限流阈值才有依据,而不是拍脑袋。
Ansible:多服务器运维工具。基于 SSH、无需在目标机装 Agent,用 YAML 描述期望状态批量执行,几十台机器改一个配置不用逐台登录。
踩坑与注意
- 清单不等于选型。同一层的组件(比如 Sentinel 和 Hystrix、Eureka 和 Nacos)只需要选一个,把清单里的东西都堆进项目只会增加维护成本。
- 优先跟着体系走。用了 Spring Cloud Alibaba,注册中心、限流、分布式事务就顺着选 Nacos、Sentinel、Seata,混搭不同体系的组件,兼容性问题要自己扛。
- 注意组件的维护状态。生态更替很快,像 Hystrix 这样进入维护模式的项目,新系统尽量避开,选社区仍在活跃迭代的替代品。
- 分布式组件都有运维成本。Kafka、Elasticsearch、Kubernetes 每一个都值得专人研究,小团队在引入前先想清楚谁来维护。
小结
这份清单覆盖了一个 Java Web 项目从开发框架、数据存储、微服务治理到容器化和大数据的大致版图。记录它的目的不是全都用上,而是遇到具体问题时知道有哪些现成方案、各自的定位是什么。生态一直在变,这一页也会随着实际使用继续增补和修正。
评论 / COMMENTS