今年你参与开源了吗?
hi 大家好,今天給大家推薦一些值得學(xué)習(xí)的優(yōu)秀開源項目,包括C, C++,Golang,Java等后臺開發(fā)主流語言,大家可以抽點時間學(xué)習(xí)一下這些優(yōu)秀項目的代碼設(shè)計和實現(xiàn)。
C經(jīng)典開源項目
1.Libev
libev是一個全功能和高性能的事件驅(qū)動庫,基于epoll,kqueue等OS提供的基礎(chǔ)設(shè)施。其以高效出名,它可以將IO事件,定時器,和信號統(tǒng)一起來,統(tǒng)一放在事件處理這一套框架下處理。基于Reactor模式,效率較高,并且代碼精簡(4.15版本8000多行),是學(xué)習(xí)事件驅(qū)動編程的很好的資源。
特點
不使用全局變量,而是每個函數(shù)都有一個循環(huán)上下文。
對每種事件類型使用小的觀察器(一個I/O觀察器在x86_64機(jī)器上使用56字節(jié),而用libevent的話使用136字節(jié))。
沒有http庫等組件。libev的功能非常少。
允許更多事件類型,例如基于wall clock或者單調(diào)時間的定時器、線程間中斷等等。
更簡單地說,libev的設(shè)計遵循UNIX工具箱的哲學(xué),盡可能好地只做一件事。
整體架構(gòu):
開源地址:
https://github.com/enki/libev
2.?Redis
Redis 是一種經(jīng)典的開源內(nèi)存Key-Value數(shù)據(jù)結(jié)構(gòu)存儲,用作數(shù)據(jù)庫、緩存和消息代理。Redis 提供了數(shù)據(jù)結(jié)構(gòu),例如字符串、散列、列表、集合、帶有范圍查詢的排序集合、位圖、超級日志、地理空間索引和流。Redis 內(nèi)置復(fù)制、Lua 腳本、LRU 驅(qū)逐、事務(wù)和不同級別的磁盤持久化,并通過 Redis Sentinel 和 Redis Cluster 自動分區(qū)提供高可用性。
代碼架構(gòu):
開源地址:
https://github.com/redis/redis
3. Nginx
Nginx是一款輕量級的Web服務(wù)器、反向代理服務(wù)器,由于它的內(nèi)存占用少,啟動極快,高并發(fā)能力強(qiáng),在互聯(lián)網(wǎng)項目中廣泛應(yīng)用。
特點:
Nginx可以部署在網(wǎng)絡(luò)上使用FastCGI腳本、SCGI處理程序、WSGI應(yīng)用服務(wù)器或Phusion Passenger模塊的動態(tài)HTTP內(nèi)容,并可作為軟件負(fù)載均衡器。
Nginx使用異步事件驅(qū)動的方法來處理請求。Nginx的模塊化事件驅(qū)動架構(gòu)可以在高負(fù)載下提供更可預(yù)測的性能。
Nginx是一款面向性能設(shè)計的HTTP服務(wù)器,相較于Apache、lighttpd具有占有內(nèi)存少,穩(wěn)定性高等優(yōu)勢。與舊版本(≤2.2)的Apache不同,Nginx不采用每客戶機(jī)一線程的設(shè)計模型,而是充分使用異步邏輯從而削減了上下文調(diào)度開銷,所以并發(fā)服務(wù)能力更強(qiáng)。整體采用模塊化設(shè)計,有豐富的模塊庫和第三方模塊庫,配置靈活。在Linux操作系統(tǒng)下,Nginx使用epoll事件模型,得益于此,Nginx在Linux操作系統(tǒng)下效率相當(dāng)高。同時Nginx在OpenBSD或FreeBSD操作系統(tǒng)上采用類似于epoll的高效事件模型kqueue。
整體架構(gòu):
開源地址:
https://github.com/nginx/nginx
4.SQLite
SQLite是一個開源的嵌入式關(guān)系數(shù)據(jù)庫,實現(xiàn)自包容、零配置、支持事務(wù)的SQL數(shù)據(jù)庫引擎。其特點是高度便攜、使用方便、結(jié)構(gòu)緊湊、高效、可靠。足夠小,大致3萬行C代碼,250K。
整體架構(gòu):
開源地址:
http://www.sqlite.org/
5.Linux
Linux 是一套免費使用和自由傳播的類 Unix 操作系統(tǒng),是一個基于 POSIX 和 UNIX 的多用戶、多任務(wù)、支持多線程和多 CPU 的操作系統(tǒng)。Linux 能運行主要的 UNIX 工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持 32 位和 64 位硬件。Linux 繼承了 Unix 以網(wǎng)絡(luò)為核心的設(shè)計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng),目前最為流行后臺服務(wù)器操作系統(tǒng)。
整體架構(gòu):
開源地址:
https://www.kernel.org/
C++開源項目
? ? 1.TinyWebServer(初學(xué)者)
這是一個幫助初學(xué)者快速實現(xiàn)網(wǎng)絡(luò)編程、搭建屬于自己的輕量級Web服務(wù)器的小項目。
項目雖小但真的五臟俱全:
使用線程池、非阻塞Socket、epoll(ET/LT均實現(xiàn))、事件處理(Reactor及模擬Proactor)的并發(fā)模型。
使用狀態(tài)機(jī)解析HTTP請求報文,支持解析GET和POST請求
訪問服務(wù)器數(shù)據(jù)庫實現(xiàn)web端用戶注冊、登錄功能,可以請求服務(wù)器圖片和視頻文件
實現(xiàn)同步/異步日志系統(tǒng),記錄服務(wù)器運行狀態(tài)
經(jīng)Webbench壓力測試可以實現(xiàn)上萬的并發(fā)連接數(shù)據(jù)交換
? ?代碼地址:
https://github.com/qinguoyi/TinyWebServer
2.sylar
C++高性能分布式服務(wù)器框架,功能最全webserver/websocket server,自定義tcp_server(包含日志模塊,配置模塊,線程模塊,協(xié)程模塊,協(xié)程調(diào)度模塊,io協(xié)程調(diào)度模塊,hook模塊,socket模塊,bytearray序列化,http模塊,TcpServer模塊,Websocket模塊,Https模塊等, Smtp郵件模塊, MySQL, SQLite3, ORM,Redis,Zookeeper)。
優(yōu)點:
基于epoll的IO復(fù)用機(jī)制實現(xiàn)Reactor模式,采用邊緣觸發(fā)(ET)模式,和非阻塞模式
由于采用ET模式,read、write和accept的時候必須采用循環(huán)的方式,直到error==EAGAIN為止,防止漏讀等清況,這樣的效率會比LT模式高很多,減少了觸發(fā)次數(shù)
Version-0.1.0基于單線程實現(xiàn),Version-0.2.0利用線程池實現(xiàn)多IO線程,Version-0.3.0實現(xiàn)通用worker線程池,基于one loop per thread的IO模式,Version-0.4.0增加定時器,Version-0.5.0增加簡易協(xié)程實現(xiàn)和異步日志實現(xiàn)
線程模型將劃分為主線程、IO線程和worker線程,主線程接收客戶端連接(accept),并通過Round-Robin策略分發(fā)給IO線程,IO線程負(fù)責(zé)連接管理(即事件監(jiān)聽和讀寫操作),worker線程負(fù)責(zé)業(yè)務(wù)計算任務(wù)(即對數(shù)據(jù)進(jìn)行處理,應(yīng)用層處理復(fù)雜的時候可以開啟)基于時間輪實現(xiàn)定時器功能,定時剔除不活躍連接,時間輪的插入、刪除復(fù)雜度為O(1),執(zhí)行復(fù)雜度取決于每個桶上的鏈表長
采用智能指針管理多線程下的對象資源增加簡易協(xié)程實現(xiàn),目前版本基于ucontext.h(供了解學(xué)習(xí),尚未應(yīng)用到本項目中)From:
simple-coroutine增加簡易C++異步日志庫 From: simple-log
支持HTTP長連接
支持優(yōu)雅關(guān)閉連接
通常情況下,由客戶端主動發(fā)起FIN關(guān)閉連接客戶端發(fā)送FIN關(guān)閉連接后,服務(wù)器把數(shù)據(jù)發(fā)完才close,而不是直接暴力close,如果連接出錯,則服務(wù)器可以直接close.
代碼地址:
https://github.com/sylar-yin/sylar
3. OpenSSL
一個強(qiáng)大的安全套接字層密碼庫,加密HTTPS,加密SSH都賊好用,同時它還可以用于跨平臺密碼工具。
OpenSSL實現(xiàn)了以下功能:
數(shù)據(jù)保密性:信息加密就是把明碼的輸入文件用加密算法轉(zhuǎn)換成加密的文件以實現(xiàn)數(shù)據(jù)的保密。加密的過程需要用到密鑰來加密數(shù)據(jù)然后再解密。
數(shù)據(jù)完整性:加密也能保證數(shù)據(jù)的一致性。例如:消息驗證碼(MAC),能夠校驗用戶提供的加密信息,接收者可以用MAC來校驗加密數(shù)據(jù),保證數(shù)據(jù)在傳輸過程中沒有被篡改過。
安全驗證:加密的另外一個用途是用來作為個人的標(biāo)識,用戶的密鑰可以作為他的安全驗證的標(biāo)識。SSL是利用公開密鑰的加密技術(shù)(RSA)來作為用戶端與服務(wù)器端在傳送機(jī)密資料時的加密通訊協(xié)定。
代碼地址:
https://www.openssl.org/source
4.LevelDB?
LevelDB 是一個由 Google 編寫的快速鍵值存儲庫,它提供了從字符串鍵到字符串值的有序映射。
LevelDB?有以下優(yōu)點:
提供應(yīng)用程序運行上下文,方便跟蹤調(diào)試
可擴(kuò)展的、多種方式記錄日志,包括命令行、文件、回卷文件、內(nèi)存、syslog服務(wù)器、Win事件日志等
可以動態(tài)控制日志記錄級別,在效率和功能中進(jìn)行調(diào)整
所有配置可以通過配置文件進(jìn)行動態(tài)調(diào)整
支持Java、C++、C、python等多種語言
整體架構(gòu):
MemTable:內(nèi)存數(shù)據(jù)結(jié)構(gòu),具體實現(xiàn)是 SkipList。接受用戶的讀寫請求,新的數(shù)據(jù)修改會首先在這里寫入。
Immutable MemTable:當(dāng) MemTable 的大小達(dá)到設(shè)定的閾值時,會變成 Immutable MemTable,只接受讀操作,不再接受寫操作,后續(xù)由后臺線程 Flush 到磁盤上。
SST Files:Sorted String Table Files,磁盤數(shù)據(jù)存儲文件。分為 Level0 到 LevelN 多層,每一層包含多個 SST 文件,文件內(nèi)數(shù)據(jù)有序。Level0 直接由 Immutable Memtable Flush 得到,其它每一層的數(shù)據(jù)由上一層進(jìn)行 Compaction 得到。
Manifest Files:Manifest 文件中記錄 SST 文件在不同 Level 的分布,單個 SST 文件的最大、最小 key,以及其他一些 LevelDB 需要的元信息。由于 LevelDB 支持 snapshot,需要維護(hù)多版本,因此可能同時存在多個 Manifest 文件。
Current File:由于 Manifest 文件可能存在多個,Current 記錄的是當(dāng)前的 Manifest 文件名。
Log Files (WAL):用于防止 MemTable 丟數(shù)據(jù)的日志文件。
開源地址:
https://github.com/google/leveldb
5.Chromium
Chromium是由Google主導(dǎo)開發(fā)的網(wǎng)頁瀏覽器。以BSD許可證等多重自由版權(quán)發(fā)行并開放源代碼,Chromium的開發(fā)可能早自2006年即開始.?Chromium?是Google 的Chrome瀏覽器背后的引擎,其目的是為了創(chuàng)建一個安全、穩(wěn)定和快速的通用瀏覽器.
整體架構(gòu):
chromium的代碼目錄包含這些模塊:
base:通用代碼集和基礎(chǔ)組件實現(xiàn)庫,包含字符串、文件、線程、消息隊列等工具類集合。
cc:負(fù)責(zé)渲染繪制,chrome為什么高效就是因為有它。chrome:瀏覽器界面模塊,大量調(diào)用了cc提供的接口。
content:多進(jìn)程沙盒瀏覽器莫款,管理多進(jìn)程和多線程。
gpu,OpenGL封裝實現(xiàn):CommandBuffer和OpenGL的兼容支持模塊。
net:網(wǎng)絡(luò)功能實現(xiàn)模塊。
media:多媒體封裝代碼,實現(xiàn)視頻播放等功能。
mojo:跨語言(C++ / Java / JavaScript)跨平臺的進(jìn)程間對象通信模塊,類似AIDL的功能。
skia:圖形庫。
third_party:排版引擎。
ui:UI庫。
ipc:?網(wǎng)絡(luò)進(jìn)程通信模塊。
v8,V8 JavaScript 引擎庫。
以上每一個模塊要想真正理解,都得花很大的功夫,簡單用一張圖來說明以上模塊的關(guān)系:
開源地址:
https://chromium.googlesource.com/chromium/src.git
Go經(jīng)典開源項目
Golang有哪些好像優(yōu)秀的項目呢?列舉一下我收集到的golang開發(fā)的優(yōu)秀項目。
1.docker
golang頭號優(yōu)秀項目,通過虛擬化技術(shù)實現(xiàn)的操作系統(tǒng)與應(yīng)用的隔離,也稱為容器。
特點:
Docker是世界領(lǐng)先的軟件容器平臺。
Docker使用Google公司推出的Go語言進(jìn)行開發(fā)實現(xiàn),基于Linux內(nèi)核的cgroup,namespace,以及AUFS類的UnionFS等技術(shù),對進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。Docke最初實現(xiàn)是基于LXC。
Docker能夠自動執(zhí)行重復(fù)性任務(wù),例如搭建和配置開發(fā)環(huán)境,從而解放了開發(fā)人員以便他們專注在真正重要的事情上:構(gòu)建杰出的軟件。
用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。
整體架構(gòu):
開源地址:
https://github.com/docker
2.kubernetes
Kubernetes(常簡稱為K8s)是用于自動部署、擴(kuò)展和管理“容器化(containerized)應(yīng)用程序”的開源系統(tǒng)。
特點:
跨主機(jī)編排容器
更充分地利用硬件資源來最大化地滿足企業(yè)應(yīng)用的需求
可移植 : 支持公有云,私有云,混合云,多重云
可擴(kuò)展 : 模塊化,插件化,可掛載,可組合,支持各種形式的擴(kuò)展
自動化 : 自動部署,自動重啟,自動復(fù)制,自動伸縮/擴(kuò)展,通過聲明式語法提供了
整體架構(gòu):
etcd保存了整個集群的狀態(tài);
apiserver提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API注冊和發(fā)現(xiàn)等機(jī)制;
controller manager負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測、自動擴(kuò)展、滾動更新等;
scheduler負(fù)責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機(jī)器上;
kubelet負(fù)責(zé)維護(hù)容器的生命周期,同時也負(fù)責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理;
Container runtime負(fù)責(zé)鏡像管理以及Pod和容器的真正運行(CRI);
kube-proxy負(fù)責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡;
Kubernetes設(shè)計理念和功能其實就是一個類似Linux的分層架構(gòu),如下圖所示:
核心層:Kubernetes最核心的功能,對外提供API構(gòu)建高層的應(yīng)用,對內(nèi)提供插件式應(yīng)用執(zhí)行環(huán)境
應(yīng)用層:部署(無狀態(tài)應(yīng)用、有狀態(tài)應(yīng)用、批處理任務(wù)、集群應(yīng)用等)和路由(服務(wù)發(fā)現(xiàn)、DNS解析等)
管理層:系統(tǒng)度量(如基礎(chǔ)設(shè)施、容器和網(wǎng)絡(luò)的度量),自動化(如自動擴(kuò)展、動態(tài)Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口層:kubectl命令行工具、客戶端SDK以及集群聯(lián)邦
生態(tài)系統(tǒng):在接口層之上的龐大容器集群管理調(diào)度的生態(tài)系統(tǒng),可以劃分為兩個范疇
Kubernetes外部:日志、監(jiān)控、配置管理、CI、CD、Workflow、FaaS、OTS應(yīng)用、ChatOps等
Kubernetes內(nèi)部:CRI、CNI、CVI、鏡像倉庫、Cloud Provider、集群自身的配置和管理等
開源地址:
https://github.com/kubernetes/kubernetes
3.etcd
etcd 是 CoreOS 團(tuán)隊于 2013 年 6 月發(fā)起的開源項目,它的目標(biāo)是構(gòu)建一個高可用的分布式鍵值(key-value)數(shù)據(jù)庫。
特點:
簡單:定義明確、面向用戶的 API (gRPC)
安全:具有可選客戶端證書身份驗證的自動 TLS
快速:基準(zhǔn)測試為 10,000 次寫入/秒
可靠:使用 Raft 正確分布
etcd 是用 Go 編寫的,使用Raft共識算法來管理高可用的復(fù)制日志。
許多公司在生產(chǎn)中使用 etcd ,在關(guān)鍵部署場景中,開發(fā)團(tuán)隊支持它,在這些場景中,etcd 經(jīng)常與Kubernetes、locksmith、vulcand、Doorman等應(yīng)用程序合作。嚴(yán)格的測試進(jìn)一步確保了可靠性。
整體架構(gòu):
httpserver
etcd node之間進(jìn)行通信,接收來自其他node的消息;raft
實現(xiàn)分布式一致性raft協(xié)議, raft模塊與server模塊的通信采用了四個channel:propc:處理client來的命令
recvc:處理http消息
readyc: 消息經(jīng)過raft處理之后封裝成Ready交給server處理
advanceC:server處理一條消息之后通知raft
WAL
server為了防止數(shù)據(jù)丟失而實現(xiàn)的write ahead log,與很多數(shù)據(jù)庫的實現(xiàn)類似snapshotter
防止wal的無限制增長,定期生成snap文件僅保留 term,index以及key value data;
mvcc
實現(xiàn)多版本的并發(fā)控制,使用revision(main和sub)來描述一個key的整個過程,從創(chuàng)建到刪除。mvcc中還包含了watcher,用于實現(xiàn)監(jiān)聽key,prefix, range的變化。
backend & boltdb
持久化key value到boltdb數(shù)據(jù)庫
raftlog
raftlog模塊包含unstable和raft的snapshot,unstable保存log entries,但是entries數(shù)量比較多的時候,就需要compact,創(chuàng)建一個snapshot,這里的snapshot還是保存在memory中的。raft模塊會定時收集entries交給server處理。
開源地址:
https://github.com/etcd-io/etcd
4.Tidb
TiDB(“Ti”代表 Titanium)是一個開源的 NewSQL 數(shù)據(jù)庫,支持混合事務(wù)和分析處理 (HTAP) 工作負(fù)載。它兼容 MySQL,具有水平可擴(kuò)展性、強(qiáng)一致性和高可用性。
特點:
水平可擴(kuò)展性
TiDB 通過簡單地添加新節(jié)點來擴(kuò)展 SQL 處理和存儲。這使得基礎(chǔ)設(shè)施容量規(guī)劃比僅垂直擴(kuò)展的傳統(tǒng)關(guān)系數(shù)據(jù)庫更容易且更具成本效益。
MySQL 兼容語法
TiDB 就像是您的應(yīng)用程序的 MySQL 5.7 服務(wù)器。您可以繼續(xù)使用所有現(xiàn)有的 MySQL 客戶端庫,并且在許多情況下,您不需要更改應(yīng)用程序中的任何一行代碼。由于 TiDB 是從頭開始構(gòu)建的,而不是 MySQL 的 fork,請查看已知兼容性差異列表。
分布式事務(wù)
TiDB 在內(nèi)部將表分片成基于范圍的小塊,我們稱之為“區(qū)域”。每個 Region 默認(rèn)大小約為 100 MiB,TiDB 使用優(yōu)化的兩階段提交來確保 Region 以事務(wù)一致的方式維護(hù)。
云原生
TiDB 旨在在云中工作——公共、私有或混合——使部署、供應(yīng)、操作和維護(hù)變得簡單。TiDB 的存儲層,稱為 TiKV,是一個Cloud Native Computing Foundation (CNCF) 畢業(yè)項目。TiDB 平臺的架構(gòu)還允許 SQL 處理和存儲以非常云友好的方式相互獨立擴(kuò)展。
最小化 ETL
TiDB 旨在支持事務(wù)處理 (OLTP) 和分析處理 (OLAP) 工作負(fù)載。這意味著,雖然傳統(tǒng)上您可能在 MySQL 上進(jìn)行交易,然后將 (ETL) 數(shù)據(jù)提取、轉(zhuǎn)換和加載到列存儲中以進(jìn)行分析處理,但不再需要此步驟。
高可用性
TiDB 使用 Raft 共識算法來確保數(shù)據(jù)在 Raft 組中的整個存儲中的高可用和安全復(fù)制。如果發(fā)生故障,Raft 組會自動為故障成員選舉新的領(lǐng)導(dǎo)者,并在無需任何人工干預(yù)的情況下自愈 TiDB 集群。故障和自愈操作對應(yīng)用程序也是透明的。
整體架構(gòu):
開源地址:
https://github.com/pingcap/tidb
5.Netpoll
Netpoll是字節(jié)跳動內(nèi)部的 Golang 高性能、I/O 非阻塞的網(wǎng)絡(luò)庫,專注于 RPC 場景。
開源社區(qū)目前缺少專注于 RPC 方案的 Go 網(wǎng)絡(luò)庫。類似的項目如:evio、gnet 等,均面向 Redis、Haproxy 這樣的場景。因此 Netpoll 應(yīng)運而生,它借鑒了 evio 和 Netty 的優(yōu)秀設(shè)計,具有出色的性能,更適用于微服務(wù)架構(gòu)。
整體架構(gòu):
netpoll 將 Reactor 以 1:N 的形式組合成主從模式。
MainReactor 主要管理 Listener,負(fù)責(zé)監(jiān)聽端口,建立新連接;
SubReactor 負(fù)責(zé)管理 Connection,監(jiān)聽分配到的所有連接,并將所有觸發(fā)的事件提交到協(xié)程池里進(jìn)行處理。
netpoll 在 I/O Task 中引入了主動的內(nèi)存管理,向上層提供 NoCopy 的調(diào)用接口,由此支持 NoCopy RPC。
使用協(xié)程池集中處理 I/O Task,減少 goroutine 數(shù)量和調(diào)度開銷。
開源地址:
https://github.com/cloudwego/netpoll
Java經(jīng)典開源項目
這里推薦一些最值得閱讀優(yōu)秀的Java開源項目。
1.Netty
Netty是一個Java NIO技術(shù)的開源異步事件驅(qū)動的網(wǎng)絡(luò)編程框架,用于快速開發(fā)可維護(hù)的高性能協(xié)議服務(wù)器和客戶端。
往通俗了講,可以將Netty理解為:一個將Java NIO進(jìn)行了大量封裝,并大大降低Java NIO使用難度和上手門檻的超牛逼框架。
特點:
設(shè)計
各種傳輸類型的統(tǒng)一 API - 阻塞和非阻塞套接字
基于靈活和可擴(kuò)展的事件模型,允許清晰的關(guān)注點分離
高度可定制的線程模型——單線程、一個或多個線程池,如 SEDA
真正的無連接數(shù)據(jù)報套接字支持(自 3.1 起)
便于使用
有據(jù)可查的 Javadoc、用戶指南和示例
沒有額外的依賴,JDK 5 (Netty 3.x) 或 6 (Netty 4.x) 就足夠了
注意:某些組件(例如 HTTP/2)可能有更多要求。?有關(guān)更多信息,請參閱?要求頁面。
表現(xiàn)
更高的吞吐量,更低的延遲
更少的資源消耗
最小化不必要的內(nèi)存復(fù)制
安全
完整的 SSL/TLS 和 StartTLS 支
開源地址:
https://github.com/netty/netty
2.J2EE框架 Spring
star:45.1k; fork:31.8k
Spring Framework 是一個開源的Java/Java EE全功能棧(full-stack)的應(yīng)用程序框架,以Apache許可證形式發(fā)布,也有.NET平臺上的移植版本。該框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的代碼,最初由 Rod Johnson 和 Juergen Hoeller等開發(fā)。Spring Framework 提供了一個簡易的開發(fā)方式,這種開發(fā)方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。
Spring 中包含的關(guān)鍵特性:
強(qiáng)大的基于 JavaBeans 的采用控制翻轉(zhuǎn)(Inversion of Control,IoC)原則的配置管理,使得應(yīng)用程序的組建更加快捷簡易。
一個可用于從 applet 到 Java EE 等不同運行環(huán)境的核心 Bean 工廠。
數(shù)據(jù)庫事務(wù)的一般化抽象層,允許宣告式(Declarative)事務(wù)管理器,簡化事務(wù)的劃分使之與底層無關(guān)。
內(nèi)建的針對 JTA 和 單個 JDBC 數(shù)據(jù)源的一般化策略,使 Spring 的事務(wù)支持不要求 Java EE 環(huán)境,這與一般的 JTA 或者 EJB CMT 相反。
JDBC 抽象層提供了有針對性的異常等級(不再從SQL異常中提取原始代碼), 簡化了錯誤處理, 大大減少了程序員的編碼量. 再次利用JDBC時,你無需再寫出另一個 '終止' (finally) 模塊. 并且面向JDBC的異常與Spring 通用數(shù)據(jù)訪問對象 (Data Access Object) 異常等級相一致.
以資源容器,DAO 實現(xiàn)和事務(wù)策略等形式與 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用眾多的翻轉(zhuǎn)控制方便特性來全面支持, 解決了許多典型的Hibernate集成問題. 所有這些全部遵從Spring通用事務(wù)處理和通用數(shù)據(jù)訪問對象異常等級規(guī)范.
靈活的基于核心 Spring 功能的 MVC 網(wǎng)頁應(yīng)用程序框架。開發(fā)者通過策略接口將擁有對該框架的高度控制,因而該框架將適應(yīng)于多種呈現(xiàn)(View)技術(shù),例如 JSP,FreeMarker,Velocity,Tiles,iText 以及 POI。值得注意的是,Spring 中間層可以輕易地結(jié)合于任何基于 MVC 框架的網(wǎng)頁層,例如 Struts,WebWork,或 Tapestry。
提供諸如事務(wù)管理等服務(wù)的面向方面編程框架。
開源地址:
https://github.com/spring-projects/spring-framework
3.Android 開源框架 EventBus Android
star:23.1k; fork:4.6k
如果你學(xué)習(xí)過設(shè)計模式,那么當(dāng)想通知其他組件某些事情發(fā)生時你一定會使用觀察者模式。好了,既然能想到這個設(shè)計模式,那么就來看一個屌爆天的Android開源框架EventBus。主要功能是替代Intent、Handler、BroadCast在Fragment、Activity、Service、線程之間傳遞消息。他的最牛逼優(yōu)點是開銷小,代碼簡潔,解耦代碼。
特點:
簡化組件之間的通信
分離事件發(fā)送者和接收者
在 UI 工件(例如活動、片段)和后臺線程中表現(xiàn)良好
避免復(fù)雜且容易出錯的依賴關(guān)系和生命周期問題
很快;專為高性能而優(yōu)化
很小(~60k jar)
是在實踐中被證明通過應(yīng)用與1,000,000,000+安裝
具有交付線程、訂閱者優(yōu)先級等高級功能。
開源地址:
https://github.com/greenrobot/EventBus
4.Java 設(shè)計模式 java-design-patterns
star:71.4k;fork:22.2k
設(shè)計模式是程序員在設(shè)計應(yīng)用程序或系統(tǒng)時解決常見問題的最佳實踐,重用設(shè)計模式有助于防止可能導(dǎo)致重大問題的細(xì)微問題,同時熟悉模式的程序員和架構(gòu)師的代碼也更具可讀性。
開源地址:
https://github.com/iluwatar/java-design-patterns
參考
https://www.jianshu.com/p/2614fdb5d1c3
https://www.jianshu.com/p/6e49aa5182f0
https://walterzhaojr.github.io/
https://www.zhihu.com/question/26415445
- END -
看完一鍵三連在看,轉(zhuǎn)發(fā),點贊
是對文章最大的贊賞,極客重生感謝你
推薦閱讀
基本功為什么如此重要!
深入理解虛擬化
深入理解Golang 編程思維和工程實戰(zhàn)
總結(jié)
以上是生活随笔為你收集整理的今年你参与开源了吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解分布式消息队列
- 下一篇: 深入理解数据库核心技术