開發技術選型參考

小飛鶴發表於2017-04-14
轉自:https://my.oschina.net/66das/blog/825950
摘要: 監控平臺,RPC框架,分散式統一框架,資料庫訪問層中介軟體,軟負載,分散式儲存,分散式快取,效能分析工具,資料庫連線池,訊息中介軟體mq,序列化,分散式協調服務,前端選型

監控平臺:

      1、cat:CAT基於Java開發的實時應用監控平臺,包括實時應用監控,業務監控   https://github.com/dianping/cat 點評網

          2、Open-Falcon:http://open-falcon.org/    小米 (非java)

               人性化的網際網路企業級監控系統 * 資料採集免配置:agent自發現、支援Plugin、主動推送模式
              * 容量水平擴充套件:生產環境每秒50萬次資料收集、告警、儲存、繪圖,可持續水平擴充套件。
              * 告警策略自發現:Web介面、支援策略模板、模板繼承和覆蓋、多種告警方式、支援回撥動作。
              * 告警設定人性化:支援最大告警次數、告警級別設定、告警恢復通知、告警暫停、不同時段不同閾值、支援維護週期,支援告警合併。
            * 歷史資料高效查詢:秒級返回上百個指標一年的歷史資料。
            * Dashboard人性化:多維度的資料展示,使用者自定義Dashboard等功能。
            * 架構設計高可用:整個系統無核心單點,易運維,易部署。

 

RPC框架

     1、 pigeon : https://github.com/dianping/pigeon     點評網

     2、 dubbo:http://dubbo.io/           阿里

     3、 dubbox:https://github.com/dangdangdotcom/dubbox   噹噹網

                            支援REST風格遠端呼叫(HTTP + JSON/XML)

                            支援基於Kryo和FST的Java高效序列化實現

                            支援基於Jackson的JSON序列化

                            支援基於嵌入式Tomcat的HTTP remoting體系

                            升級Spring

                            升級ZooKeeper客戶端

                            支援完全基於Java程式碼的Dubbo配置

                            調整Demo應用

                            修正了dubbo的bug 包括配置、序列化、管理介面等等的bug

        4、motan: github.com/weibocom/motan    新浪微博

                概述

                    Motan 是一套高效能、易於使用的分散式遠端服務呼叫(RPC)框架。

                功能

                    支援通過spring配置方式整合,無需額外編寫程式碼即可為服務提供分散式呼叫能力。

                    支援整合consul、zookeeper等配置服務元件,提供叢集環境的服務發現及治理能力。

                    支援動態自定義負載均衡、跨機房流量調整等高階服務排程能力。

                    基於高併發、高負載場景進行優化,保障生產環境下RPC服務高可用。

         5、harpc :https://github.com/baifendian/harpc    百分點

                    基於Thrift的跨語言、高可用、高效能、輕量級的RPC框架。

                    功能介紹

                        跨語言通訊

                        方便的使Java、Python、C++三種程式可以相互通訊

                        負載均衡和容災處理

                        方便的實現任務的分散式處理

                        支援服務的水平擴充套件,自動發現新的服務節點

                        能夠相容各種異常情況,如節點的異常down機

                    視覺化管理

                        通過服務管理系統可以方便檢視服務狀態和統計資訊

                    與原生thrift通訊

                        支援與原生thrift服務進行通訊

分散式統一框架

     1、 Albianj2:https://github.com/crosg/Albianj2    閱文集團

                               Albianj是我們設計並開發的一套分散式統一框架。他主要是面向海量資料處理、海量資料 訪 問、並解決網際網路開發中經常會碰到的資料海量增長問題,也一併解決 網際網路開發團隊 中,因開發人員的水平參差不齊而導致的程式碼質量不可控問題。它主要有簡單小巧的IoC, ORM,資料路由,快取整合,分散式唯一id等等功能

                              1. 一個簡單的Service服務,比spring輕量很多很多 

                              2. 一個簡單的ORM框架 

                              3. 資料路由服務 

                              4. 分散式事務服務(支援強、弱兩種模型) 

                              5. 簡單的快取服務 

                              6. 統一的Id服務 

                              7. 日誌服務(這部分有待擴充套件) 

                              8. 密碼安全服務 

                              9. 簡單的restful服務 

                             10. 一個輕量級的配置服務 

資料庫訪問層中介軟體:

     1、zebra:https://github.com/dianping/zebra     點評網

                             1. 配置集中管理,動態重新整理

                             2. 支援讀寫分離、分庫分表

                             3. 豐富的監控資訊在CAT上展現

     2、mango:https://github.com/jfaster/mango/     樂視

                              1、超高效能,響應速度接近直接使用JDBC

                              2、採用介面與註解的形式定義DAO,完美結合db與cache操作

                              3、支援動態sql,可以構造任意複雜的sql語句

                              4、支援多資料來源,分表,分庫,事務

                              5、內嵌“函式式呼叫”功能,能將任意複雜的物件,對映到資料庫的表中

                              6、高效詳細的實時統計系統,方便開發者隨時瞭解自己的系統

                              7、獨立jar包,不依賴其它jar包

                              8、提供便捷的spring外掛,與spring無縫整合

     3、Mycat:http://www.mycat.org.cn/

                              國內最活躍的、效能最好的開源資料庫中介軟體

                              關鍵特性

                              支援SQL92標準

                              支援MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語法

                              遵守Mysql原生協議,跨語言,跨平臺,跨資料庫的通用中介軟體代理。

                              基於心跳的自動故障切換,支援讀寫分離,支援MySQL主從,以及galera cluster叢集。

                              支援Galera for MySQL叢集,Percona Cluster或者MariaDB cluster

                              基於Nio實現,有效管理執行緒,解決高併發問題。

                              支援資料的多片自動路由與聚合,支援sum,count,max等常用的聚合函式,支援跨庫分頁。

                              支援單庫內部任意join,支援跨庫2表join,甚至基於caltlet的多表join。

                              支援通過全域性表,ER關係的分片策略,實現了高效的多表join查詢。

                              支援多租戶方案。

                              支援分散式事務(弱xa)。

                              支援XA分散式事務(1.6.5)。

                              支援全域性序列號,解決分散式下的主鍵生成問題。

                              分片規則豐富,外掛化開發,易於擴充套件。

                              強大的web,命令列監控。

                        支援前端作為MySQL通用代理,後端JDBC方式支援Oracle、DB2、SQL Server 、 mongodb 、巨杉。

                              支援密碼加密

                              支援服務降級

                              支援IP白名單

                              支援SQL黑名單、sql注入攻擊攔截

                              支援prepare預編譯指令(1.6)

                              支援非堆記憶體(Direct Memory)聚合計算(1.6)

                              支援PostgreSQL的native協議(1.6)

                              支援mysql和oracle儲存過程,out引數、多結果集返回(1.6)

                              支援zookeeper協調主從切換、zk序列、配置zk化(1.6)

                              支援庫內分表(1.6)

                              叢集基於ZooKeeper管理,線上升級,擴容,智慧優化,大資料處理(2.0開發版)。

軟負載:

     1、camel:https://github.com/dianping/camel    點評網

               是大眾點評開發的軟負載一體解決方案,承擔了F5硬負載層後的軟負載工作。

               Camel已      成為大眾點評網  絡流量中必不可缺的一層

 

分散式儲存:

     1、FastDFS: https://github.com/happyfish100/fastdfs

                開源的輕量級分散式檔案系統,對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合以檔案為載體的線上服務,如相簿網站、視訊網站等等。

                FastDFS服務端有兩個角色:跟蹤器(tracker)和儲存節點(storage)。跟蹤器主要做排程工作,在訪問上起負載均衡的作用。

                儲存節點儲存檔案,完成檔案管理的所有功能:儲存、同步和提供存取介面,FastDFS同時對檔案的meta data進行管理。所謂檔案的meta data就是檔案的相關屬性,以鍵值對(key value pair)方式表示,如:width=1024,其中的key為width,value為1024。檔案meta data是檔案屬性列表,可以包含多個鍵值對

     2、zimg:http://blog.buaa.us/zimg-v2-release/

                              一個圖片儲存程式,主要的優點是可以根據請求實時處理圖片,並且進行壓縮和儲存,

一是方便前端使用者,二來降低流量。zimg設計之初就是面向中小型應用,是儲存量小於

TB級別的單機儲存方案。它的1.0版本主要競爭對手是基於Nginx+PHP的圖片伺服器,

因為採用了特殊的策略,zimg會比PHP快出很多

 

分散式快取:

     1、redis:https://redis.io/

     Redis是一個開源(BSD許可),記憶體儲存的資料結構伺服器,可用作資料庫,快取記憶體和訊息佇列代理。它支援字串、雜湊表、列表、集合、有序集合,點陣圖,hyperloglogs等資料型別。內建複製、Lua指令碼、LRU收回、事務以及不同級別磁碟持久化功能,同時通過Redis Sentinel提供高可用,通過Redis Cluster提供自動分割槽,可通過一致hash實現分散式儲存

     2、ignite:http://ignite.apache.org/

       Apache Ignite記憶體資料架構是一種高效能,整合和分散式的記憶體平臺,用於實時計算和處理大規模資料集,比使用傳統基於磁碟或快閃記憶體技術的可能性快幾個數量級

3.coherence
付費:http://www.oracle.com/technetwork/middleware/coherence/overview/index.html

      Oracle Coherence是行業領先的記憶體資料網格解決方案,通過提供對常用資料的快速訪問,組織可以可預測地擴充套件關鍵任務應用程式。 隨著資料量和客戶期望的增加,由“物聯網”,社交,移動,雲和永遠連線的裝置驅動,因此需要實時處理更多的資料,解除安裝超負荷的共享資料服務,並提供 可用性保證。無須叢集就可以操作多節點共享記憶體,多幾節點聚合計算能力

 

效能分析工具:

      1、 TProfiler:https://github.com/alibaba/TProfiler    阿里

       TProfiler是一個可以在生產環境長期使用的效能分析工具.它同時支援剖析和取樣兩種方式,記錄方法執行的時間和次數,生成方法熱點 物件建立熱點 執行緒狀態分析等資料,為查詢系統效能瓶頸提供資料支援.

      TProfiler在JVM啟動時把時間採集程式注入到位元組碼中,整個過程無需修改應用原始碼.執行時會把資料寫到日誌檔案,一般情況下每小時輸出的日誌小於50M.

       業界同類開源產品都不是針對大型Web應用設計的,對效能消耗較大不能長期使用,TProfiler解決了這個問題.目前TProfiler已應用於淘寶的核心Java前端系統.

        部署後低峰期對應用響應時間影響20% 高峰期對吞吐量大約有30%的降低(高峰期可以遠端關閉此工具).

 

資料庫連線池:

     1、druid:https://github.com/alibaba/druid   阿里

 

訊息中介軟體mq:

     1、ActiveMq:

       ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位

     2、RocketMQ:https://github.com/alibaba/RocketMQ    阿里

                              1、RocketMQ 是一款分散式、佇列模型的訊息中介軟體,具有以下特點:

                              2、能夠保證嚴格的訊息順序

                              3、提供豐富的訊息拉取模式

                              4、高效的訂閱者水平擴充套件能力

                              5、實時的訊息訂閱機制

                              6、億級訊息堆積能力

                              7、Metaq3.0 版本改名,產品名稱改為RocketMQ

     3、Kafka:http://kafka.apache.org/

       Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,它可以處理消費者規模的網站中的所有動作流資料。 這種動作(網頁瀏覽,搜尋和其他使用者的行動)是在現代網路上的許多社會功能的一個關鍵因素。 這些資料通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 對於像Hadoop的一樣的日誌資料和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的並行載入機制來統一線上和離線的訊息處理,也是為了通過叢集來提供實時的消費

 

     4、RabbitMq:http://www.rabbitmq.com/

                              應用程式的健壯訊息傳遞

                              易於使用

                              在所有主要作業系統上執行

                              支援大量的開發者平臺

                              開源和商業支援

 

序列化:

     1、fastjson:https://github.com/alibaba/fastjson   阿里

                              fastjson 是一個效能很好的 Java 語言實現的 JSON 解析器和生成器。

                              主要特點:

                              快速FAST (比其它任何基於Java的解析器和生成器更快,包括jackson)

                              強大(支援普通JDK類包括任意Java Bean Class、Collection、Map、Date或enum)

                              零依賴(沒有依賴其它任何類庫除了JDK)

     2、Jackson:https://github.com/FasterXML/jackson/    

                              Jackson 是一個 Java 用來處理 JSON 格式資料的類庫,效能非常好

     3、gson:https://github.com/google/gson    google

                              提供簡單的tojson()和fromjson()方法將java物件的JSON

                              允許存在不可修改的物件被轉換為從JSON

                              java泛型的廣泛支援

                              允許物件的自定義表示

                              支援任意複雜物件(具有深層繼承層次和泛型型別的廣泛使用)

    

    4、kryo:

      諸如Hessian和GPB這些三方的序列化框架或多或少的都對Java原生序列化機制做出了一些改進;而對於Kryo來說,改進無疑是更徹底一些;在很多評測中,Kryo的資料都是遙遙領先的;

     Kryo的處理和Google Protobuf類似。但有一點需要說明的是,Kryo在做序列化時,也沒有記錄屬性的名稱,而是給每個屬性分配了一個id,但是他卻並沒有GPB那樣通過一個schema檔案去做id和屬性的一個對映描述,所以一旦我們修改了物件的屬性資訊,比如說新增了一個欄位,那麼Kryo進行反序列化時就可能發生屬性值錯亂甚至是反序列化失敗的情況;而且由於Kryo沒有序列化屬性名稱的描述資訊,所以序列化/反序列化之前,需要先將要處理的類在Kryo中進行註冊,這一操作在首次序列化時也會消耗一定的效能。

     另外需要提一下的就是目前kryo目前還只支援Java語言。

 

分散式協調服務(可作為配置中心服務):

     1、zookeeper:http://zookeeper.apache.org/

                              ZooKeeper是以Fast Paxos演算法為基礎的,Paxos 演算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥導致沒有一個proposer能提交成功,而Fast Paxos作了一些優化,通過選舉產生一個leader (領導者),只有leader才能提交proposer,具體演算法可見Fast Paxos。因此,要想弄懂ZooKeeper首先得對Fast Paxos有所瞭解。

                              ZooKeeper的基本運轉流程:

                              1、選舉Leader。

                              2、同步資料。

                              3、選舉Leader過程中演算法有很多,但要達到的選舉標準是一致的。

                              4、Leader要具有最高的zxid。

                              5、叢集中大多數的機器得到響應並follow選出的Leader。

前端選型:

     1、bootstrap:http://getbootstrap.com/

    Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web 開發更加快捷。它由Twitter的設計師Mark Otto和Jacob Thornton合作開發,是一個CSS/HTML框架

     2、vue:http://vuejs.org/

       是一套構建使用者介面的 漸進式框架。與其他重量級框架不同的是,Vue 採用自底向上增量開發的設計。Vue 的核心庫只關注檢視層,並且非常容易學習,非常容易與其它庫或已有專案整合。另一方面,Vue 完全有能力驅動採用單檔案元件和 Vue 生態系統支援的庫開發的複雜單頁應用。

Vue.js 的目標是通過儘可能簡單的 API 實現響應的資料繫結和組合的檢視元件

     3、React:http://reactjs.cn/react/index.html

     4、AngularJS:https://angularjs.org/

                               核心的是:MVC、模組化、自動化雙向資料繫結、語義化標籤、依賴注入等等。

     5、ztree:http://www.treejs.cn/v3/main.php#_zTreeInfo

     6、weex:https://weex-project.io/index.html     阿里跨平臺前端

     7、easyui:http://www.jeasyui.com

                              easyui是一種基於jQuery的使用者介面外掛集合。

                              easyui為建立現代化,互動,JavaScript應用程式,提供必要的功能。

                              使用easyui你不需要寫很多程式碼,你只需要通過編寫一些簡單HTML標記,就可以定義使用者介面。

                              easyui是個完美支援HTML5網頁的完整框架。

                              easyui節省您網頁開發的時間和規模。

                              easyui很簡單但功能強大的。

     8、amaze:http://amazeui.org/     國產開源 HTML5 跨屏前端框架

 

微服務

1、springboot

2、MSF4J: 

相關文章