Các framework mã nguồn mở và dự án hạ tầng Java chất lượng
Khoảng 3477 từKhoảng 12 phút
Trang này tập hợp các framework, middleware và hạ tầng được dùng làm dependency của ứng dụng hoặc deploy độc lập. Các hệ thống có đầy đủ chức năng nghiệp vụ được đặt trong dự án thực hành, còn các dependency Java nhỏ dùng chung được đặt trong thư viện tiện ích.
Framework nền tảng
Web framework
- Spring Boot: Dùng để xây dựng các ứng dụng Spring độc lập, có thể chạy được, cung cấp các khả năng như auto-configuration, Web server nhúng, giám sát production và externalized configuration.
- Solon: Framework phát triển ứng dụng enterprise Java trong nước, hướng đến mọi trường hợp sử dụng.
- Javalin: Một Web framework lightweight, đồng thời hỗ trợ Java và Kotlin, được Microsoft, Red Hat, Uber và các công ty khác sử dụng.
- Play Framework: Web framework tốc độ cao dành cho Java và Scala.
- Blade: Web framework hướng đến sự đơn giản và hiệu quả, dựa trên Java8 + Netty4.
Microservice / cloud-native
- Armeria: Phù hợp để xây dựng microservice, hỗ trợ các công nghệ như gRPC, Thrift, Kotlin, Retrofit, Spring Boot và Dropwizard.
- Quarkus: Framework Java dành cho môi trường cloud-native và container, hỗ trợ khởi động nhanh, mức sử dụng memory thấp hơn và native image.
- Helidon: Một nhóm thư viện Java dùng để viết microservice, hỗ trợ hai programming model là Helidon MP và Helidon SE.
Tài liệu API
- Swagger Core: Bản triển khai Swagger bằng Java, dùng annotation và model để tạo tài liệu OpenAPI.
- springdoc-openapi: Tạo tài liệu OpenAPI 3 cho ứng dụng Spring Boot và cung cấp tích hợp Swagger UI. Trước khi sử dụng cần xác nhận version tương thích với version Spring Boot hiện tại.
Mapping Bean
- MapStruct (khuyến nghị): Java annotation processor tuân thủ đặc tả JSR 269, tạo code mapping Bean type-safe ở giai đoạn compile, không phụ thuộc runtime reflection.
- MapStruct Plus: Phiên bản nâng cao của MapStruct, hỗ trợ tự động tạo interface Mapper.
Khác
- Guice: Một dependency injection framework lightweight mã nguồn mở của Google, tương đương một Spring Boot lightweight với chức năng được tinh giản tối đa. Trong một số trường hợp, nó rất hữu ích, chẳng hạn khi dự án chỉ cần dependency injection mà không cần các tính năng như AOP.
- Spring Batch: Batch framework hướng đến việc đọc, xử lý và ghi một lượng lớn record. Nó phụ trách execution model của job và step, không phải scheduling framework như Quartz hay XXL-JOB.
Authentication và authorization
Authentication quyền hạn
- Sa-Token: Framework authentication quyền hạn Java lightweight, tích hợp sẵn authentication, authorization, single sign-on, kick user offline và tự động gia hạn, có API style trực tiếp hơn Spring Security.
- Spring Security: Security framework chính thức của Spring, có thể dùng cho identity verification, authorization, encryption và session management, hiện là Java security framework được sử dụng rộng rãi nhất.
- Shiro: Java security framework, có chức năng tương tự Spring Security nhưng dễ sử dụng hơn.
Đăng nhập bên thứ ba
- WxJava: Java SDK phát triển WeChat, hỗ trợ các trường hợp sử dụng như WeChat Pay, Open Platform, Mini Program, WeCom và Official Account.
- pac4j: Java security engine, hỗ trợ các protocol như OpenID Connect, OAuth, SAML, CAS, LDAP và JWT, có thể tích hợp nhiều Web framework.
Single sign-on (SSO)
- CAS: Giải pháp single sign-on trên network đa ngôn ngữ dành cho enterprise.
- MaxKey: Hệ thống authentication single sign-on, cung cấp các chức năng quản lý identity user (IDM), identity authentication (AM), single sign-on (SSO), quản lý quyền RBAC và quản lý resource an toàn, theo chuẩn và mở.
- Keycloak: Hệ thống identity authentication và access management miễn phí, mã nguồn mở, hỗ trợ chức năng single sign-on có khả năng cấu hình cao.
Network communication
- Netty: Network framework asynchronous event-driven dựa trên NIO, dùng để phát triển các ứng dụng network như TCP, UDP và HTTP.
- Retrofit: HTTP client type-safe phù hợp cho Android và Java. HTTP request của Retrofit sử dụng thư viện OkHttp (một network framework được sử dụng rộng rãi).
- Forest: Java HTTP client framework declarative, gọi REST API bên thứ ba thông qua interface và annotation, có thể là lựa chọn ngoài Retrofit và OpenFeign.
- OpenFeign: Java HTTP client declarative, mô tả remote call thông qua interface và annotation, phù hợp cho việc gọi HTTP API giữa các service.
- gRPC-Java: Bản triển khai gRPC bằng Java, dựa trên HTTP/2 và Protocol Buffers, phù hợp cho các trường hợp RPC cần interface type-safe và stream communication.
Database
Database connection pool
- Druid: Database connection pool JDBC có khả năng monitoring.
- HikariCP: JDBC connection pool lightweight, hiệu năng cao, đồng thời là implementation connection pool mặc định của Spring Boot.
Database framework
- MyBatis-Plus: Công cụ nâng cao cho MyBatis, cung cấp các khả năng như CRUD dùng chung, condition builder, pagination và tạo code.
- MyBatis-Flex: Framework nâng cao cho MyBatis, hỗ trợ CRUD, pagination query, multi-table query và batch operation.
- jOOQ: Cách tốt nhất để viết SQL bằng Java.
- Redisson: Redisson là một Java in-memory data grid (In-Memory Data Grid) đặt trên Redis, tận dụng đầy đủ ưu thế của Redis key-value database để cung cấp cho Java developer một loạt utility class phổ biến mang tính distributed. Ví dụ: các Java object distributed (
Set,SortedSet,Map,List,Queue,Deque, v.v.), distributed lock, v.v. Xem chi tiết tại: giới thiệu dự án Redisson.
Data synchronization
- Canal: Cung cấp incremental data subscription và consumption thông qua việc phân tích MySQL Binlog, thường dùng cho cache synchronization, data heterogeneity và xử lý change event.
- DataX: DataX là công cụ/nền tảng data synchronization offline được sử dụng rộng rãi trong Tập đoàn Alibaba, thực hiện data synchronization hiệu quả giữa nhiều heterogeneous data source như MySQL, Oracle, SqlServer, Postgre, HDFS, Hive, ADS, HBase, TableStore(OTS), MaxCompute(ODPS), DRDS, v.v.
Time-series database
- IoTDB: Time-series database trong nước được viết bằng Java, cung cấp cho user các dịch vụ thu thập, lưu trữ và phân tích data. Tích hợp liền mạch với Hadoop, Spark và các công cụ visualization (như Grafana), đáp ứng nhu cầu lưu trữ lượng lớn data, ghi data throughput cao và query, phân tích data phức tạp trong lĩnh vực industrial IoT.
- QuestDB: Time-series database mã nguồn mở hướng đến throughput ghi cao và SQL query latency thấp, cung cấp các phương thức kết nối như PostgreSQL wire protocol, REST và InfluxDB Line Protocol.
Search engine
- Elasticsearch (khuyến nghị): Search engine mã nguồn mở, distributed, RESTful.
- Meilisearch: Search engine mạnh, nhanh, mã nguồn mở, dễ sử dụng và deploy, hỗ trợ Chinese search (không cần thêm configuration).
- Solr: Distributed search platform được xây dựng trên Apache Lucene.
Testing
Testing framework
- JUnit 5: Unit testing framework thường dùng trong hệ sinh thái Java và JVM.
- Mockito: Java Mock testing framework, có thể dùng test double để cô lập các object khó tạo hoặc phụ thuộc hệ thống bên ngoài.
- AssertJ: Thư viện fluent assertion dành cho Java và JVM, phù hợp để nâng cao khả năng dễ đọc của test assertion và chất lượng error message.
- WireMock: Công cụ mô phỏng HTTP service (Mock your APIs).
- Testcontainers: Khởi động container dùng một lần cho integration test, hỗ trợ database, message queue, browser và các dependency khác có thể containerize.
Đọc thêm:
- The Practical Test Pyramid- Martin Fowler (Một bài viết rất hay, nhưng bằng tiếng Anh)
Testing platform
- MeterSphere: Testing platform continuous mã nguồn mở, bao quát các chức năng như test management, API testing, performance testing và team collaboration.
API debugging
- Insomnia: API client cross-platform, hỗ trợ REST, GraphQL, WebSocket, SSE và gRPC, đồng thời cung cấp các phương thức lưu trữ data local và Git.
- Hoppscotch: API testing tool mã nguồn mở, được định vị là lựa chọn mã nguồn mở thay thế cho các sản phẩm như Postman và Insomnia.
- Restful Fast Request: Postman dành cho IDEA, gồm API debugging tool + API management tool + API search tool.
Task scheduling
- Quartz: Một scheduling framework mã nguồn mở rất phổ biến, là framework tiêu biểu hoặc standard trong lĩnh vực Java scheduled task. Nhiều scheduling framework khác được phát triển dựa trên
quartz, chẳng hạnelastic-jobcủa Dangdang là distributed scheduling solution được phát triển mở rộng dựa trênquartz. - XXL-JOB: Distributed task scheduling platform, cung cấp các khả năng như task management, scheduling log, failover và mở rộng executor.
- ElasticJob: Distributed scheduling solution dựa trên Quartz và ZooKeeper, cung cấp các khả năng như sharding, scale-out linh hoạt và failover.
- DolphinScheduler: Distributed, dễ mở rộng, visual workflow task scheduling platform, dùng để orchestrate các task có dependency phức tạp.
Workflow
- Flowable : Phát triển từ một nhánh của Activiti5, có chức năng phong phú. Trên cơ sở Activiti, nó bổ sung nhiều chức năng nâng cao như hỗ trợ mạnh hơn cho CMMN (Case Management Model and Notation), DMN (Decision Model and Notation), cùng các lựa chọn tích hợp linh hoạt hơn.
- Activiti: Phần mở rộng chức năng tương đối thận trọng, phù hợp với các ứng dụng enterprise truyền thống cần BPMN 2.0 workflow engine ổn định.
- Warm-Flow: Workflow engine mã nguồn mở trong nước, có đặc điểm đơn giản, lightweight nhưng không đơn điệu, đầy đủ chức năng, component độc lập và có thể mở rộng.
- FlowLong: Workflow engine mã nguồn mở trong nước, được xây dựng chuyên biệt cho quy trình phê duyệt mang đặc trưng Trung Quốc.
Distributed
API gateway
- Kong: Kong là một distributed microservice abstraction layer cloud-native, nhanh và có khả năng scale (còn được gọi là API gateway, API middleware hoặc trong một số trường hợp là service mesh). Được phát hành dưới dạng dự án mã nguồn mở vào năm 2015, giá trị cốt lõi của nó là performance cao và khả năng mở rộng.
- ShenYu: API gateway reactive, hiệu năng cao, có khả năng mở rộng, phù hợp với các trường hợp microservice.
- Spring Cloud Gateway: API gateway của Spring Cloud, cung cấp các khả năng như routing, filter, rate limiting và tích hợp service discovery.
- Zuul: L7 application gateway mã nguồn mở của Netflix, cung cấp các khả năng như dynamic routing, monitoring, elasticity và security.
Configuration center
- Apollo (khuyến nghị): Apollo là distributed configuration center do bộ phận framework của Ctrip phát triển, có thể quản lý tập trung configuration của application ở các environment và cluster khác nhau, push theo thời gian thực đến application sau khi configuration thay đổi, đồng thời có các đặc tính như quản lý permission và governance process theo chuẩn, phù hợp với các trường hợp quản lý configuration cho microservice.
- Nacos (khuyến nghị): Nacos là component service registration và discovery do Spring Cloud Alibaba cung cấp, tương tự Consul và Eureka. Ngoài ra, nó còn cung cấp chức năng distributed configuration management.
- Spring Cloud Config: Spring Cloud Config là configuration center ra đời sớm nhất trong hệ sinh thái Spring Cloud. Dù sau đó Consul được phát hành và có thể thay thế chức năng configuration center, Config vẫn phù hợp với dự án Spring Cloud và có thể triển khai chức năng thông qua configuration đơn giản.
- Consul: Consul là phần mềm mã nguồn mở do HashiCorp phát hành, cung cấp các chức năng như service governance, configuration center và control bus trong hệ thống microservice. Mỗi chức năng có thể được sử dụng riêng theo nhu cầu hoặc cùng nhau để xây dựng một service mesh toàn diện. Tóm lại, Consul cung cấp một giải pháp service mesh hoàn chỉnh.
Distributed tracing
- SkyWalking: Application performance monitoring và observability platform hướng đến các hệ thống distributed, microservice và cloud-native.
- OpenTelemetry Java: Java API và SDK của OpenTelemetry, dùng để tạo và export dữ liệu telemetry Trace, Metric và Log. Nó phụ trách instrumentation và collection, không tương đương backend storage và visualization platform.
Distributed lock
- Redisson: Redisson cung cấp hỗ trợ toàn diện và mạnh mẽ cho distributed lock, vượt qua implementation Redis lock đơn giản.
- ShedLock: Lock scheduled task trong môi trường deploy distributed, tránh cùng một task được thực thi đồng thời trên nhiều instance. Nó chỉ giải quyết mutual exclusion của scheduled task, không phải giải pháp distributed lock dùng chung.
High-performance
Multithreading
- Dynamic Tp: Dynamic thread pool lightweight, tích hợp chức năng monitoring và alerting, quản lý thread pool của third-party middleware, dựa trên configuration center phổ biến (đã hỗ trợ Nacos, Apollo, Zookeeper, Consul, Etcd, có thể custom implementation thông qua SPI).
Cache
Local cache
- Caffeine: Thư viện local cache Java hiệu năng cao, hỗ trợ eviction strategy dựa trên capacity, time và reference.
- Guava: Java core library của Google, tích hợp implementation local cache tương đối hoàn chỉnh.
Distributed cache
- Redis: Một in-memory database được phát triển bằng ngôn ngữ C, lựa chọn hàng đầu cho distributed cache.
- Dragonfly: In-memory database tương thích với Redis và Memcached API. Trước khi migration vẫn cần kiểm tra command coverage, persistence, cluster capability và client behavior, không thể trực tiếp thay thế chỉ dựa trên tuyên bố tương thích protocol.
Multi-level cache
- JetCache: Cache framework mã nguồn mở của Alibaba, hỗ trợ các chức năng như multi-level cache, tự động refresh distributed cache và TTL.
Message queue
Distributed queue:
- RocketMQ: Một distributed message middleware hiệu năng cao, throughput cao do Alibaba mã nguồn mở.
- Kafka: Kafka là một distributed message system dựa trên publish / subscribe.
- RabbitMQ: Message queue được phát triển bằng Erlang và triển khai protocol AMQP.
Read-write separation và database sharding
- ShardingSphere: ShardingSphere là một ecosystem gồm các giải pháp distributed database middleware mã nguồn mở, bao gồm 3 sản phẩm độc lập với nhau là Sharding-JDBC, Sharding-Proxy và Sharding-Sidecar (đang lên kế hoạch).
High availability
Rate limiting
Distributed rate limiting:
- Sentinel (khuyến nghị): Component bảo vệ high availability hướng đến distributed service architecture, lấy traffic làm điểm bắt đầu, giúp user đảm bảo tính ổn định của microservice từ nhiều khía cạnh như traffic control, circuit breaking và degradation, system adaptive protection.
Single-instance rate limiting:
- Bucket4j: Một rate limiting library rất tốt dựa trên token bucket / leaky bucket algorithm.
- Resilience4j: Fault tolerance component lightweight, cung cấp các khả năng như circuit breaking, rate limiting, retry và isolation.
Monitoring
- Spring Boot Admin: Quản lý và monitoring ứng dụng Spring Boot.
- Metrics: Thu thập metric ở cấp JVM và application. Nhờ đó bạn biết điều gì đang xảy ra.
Logging
- ELK: Tổ hợp Elasticsearch, Logstash và Kibana.
- Elastic Stack: Bổ sung các component data collection như Beats trên nền tảng ELK.
- EFK: Giải pháp logging dùng Fluentd thay cho Logstash.
Bytecode manipulation
- ASM: Framework thao tác và phân tích Java bytecode dùng chung. Nó có thể được dùng để sửa trực tiếp class hiện có ở dạng binary hoặc tạo class động.
- Byte Buddy: Thư viện tạo và thao tác Java bytecode, có thể tạo và sửa Java class tại runtime mà không cần gọi Java compiler.
- Javassist: Thư viện chỉnh sửa Java bytecode động.
- Recaf: Java bytecode editor hiện đại, dựa trên ASM (framework thao tác Java bytecode) để sửa bytecode, giúp đơn giản hóa quá trình chỉnh sửa Java application đã compile.
