序文
最近の建国記念日を利用して、アリババがオープンソースにした10の神レベルのプロジェクトを特別に整理しました。
これらのオープンソースプロジェクトのほとんどは、私が実際の作業で使用したか、同僚によって使用されました。それは本当に良いです、とても価値があります、そして今私は皆にそれを推薦します。
1.ドルイド
Druidは、Java言語で最高のデータベース接続プールであると主張しており、強力な監視および拡張機能を提供できます。監視の背景を次の図に示します。
ドルイドの主な利点は次のとおりです。
- データベースアクセスのパフォーマンスを監視できます。
- これは、SQLインジェクション攻撃に対する防御を実現するためのSQLセマンティック分析に基づくWallFilterを提供します。
- 接続リークを監視するためのさまざまな手段を提供します。
- データベースパスワード暗号化の機能を提供します。
- SQL実行ログを出力できます。
githubアドレス:https ://github.com/alibaba/druid
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.alibaba/druid
Mavenの依存関係を構成します。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
2. fastjson
fastjson
これはAlibabaのオープンソースJSON解析ライブラリであり、JSON形式の文字列を解析し、Java BeansからJSON文字列へのシリアル化、およびJSON文字列からJavaBeansへの逆シリアル化をサポートできます。
fastjsonの主な利点は次のとおりです。
- 高速、fastjsonは他のJSONライブラリと比較して高速です。fastjsonは2011年にバージョン1.1.xをリリースして以来、そのパフォーマンスはJavaで実装された他のJSONライブラリによって決して超えられていません。
- 広く使用されているfastjsonは、Alibabaで広く使用されており、数万台のサーバーに導入されており、業界で広く受け入れられています。2012年には、OpenSourceChinaによって最も人気のある国内のオープンソースソフトウェアの1つに選ばれました。
- 使い方は簡単で、fastjsonのAPIは非常に簡潔です。
//序列化
String text = JSON.toJSONString(obj);
//反序列化
VO vo = JSON.parseObject("{...}", VO.class);
- 完全な機能、ジェネリックのサポート、大きなテキストのストリーム処理のサポート、列挙のサポート、シリアル化および逆シリアル化の拡張機能のサポート。
githubアドレス:https ://github.com/alibaba/fastjson
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.alibaba/fastjson
Mavenの依存関係を構成します。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
3.ダボ
Apache Dubboは、RPC通信とマイクロサービスガバナンスという2つの主要な機能を提供するマイクロサービス開発フレームワークです。つまり、Dubboを使用して開発されたマイクロサービスは、リモートで相互に検出して通信することができます。同時に、Dubboが提供する豊富なサービスガバナンス機能を使用することで、サービスディスカバリ、負荷分散、トラフィックなどのサービスガバナンスの要求が発生します。スケジューリングを実現できます。
同時に、Dubboは非常に拡張性が高く、ユーザーはほぼすべてのファンクションポイントで実装をカスタマイズして、ビジネスニーズに合わせてフレームワークのデフォルトの動作を変更できます。現在、管理と保守のためにApacheに引き渡されています。
アーキテクチャ図は次のとおりです。
ダボの主な利点は次のとおりです。
- 透過的なインターフェイスに基づくRPC
- スマートロードバランシング
- 自動サービス登録と検出
- 高いスケーラビリティ
- ランタイムトラフィックルーティング
- ビジュアルサービスガバナンス
- クラウドネイティブフレンドリー
githubアドレス:https ://github.com/apache/dubbo
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.alibaba/dubbo/
Mavenの依存関係を構成します。
<properties>
<dubbo.version>3.0.3</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
4. Rocketmq
Apache RocketMQは、低遅延、高パフォーマンスと信頼性、数兆レベルの容量、および柔軟なスケーラビリティを備えた分散型メッセージングおよびストリーミングプラットフォームです。
複数の機能を提供します。
- パブリッシュ/サブスクライブ、要求/応答、ストリーミングなどのメッセージングパターン
- 金融グレードの取引ニュース
- DLedgerに基づく組み込みのフォールトトレランスと高可用性構成オプション
- Java、C / C ++、Python、Goなどの複数の言語間クライアント
- TCP、SSL、AIOなどのプラグ可能なトランスポートプロトコル
- 組み込みのメッセージ追跡機能、オープントレースもサポート
- 用途の広いビッグデータとストリーミングメディアのエコシステム統合
- 時間またはオフセットによるメッセージトレースバック
- 同じキューでの信頼性の高いFIFOと厳密に順序付けられたメッセージ配信
- 効率的なプルプッシュ消費モデル
- 1つのキューに数百万のメッセージを蓄積できます
- JMSやOpenMessagingなどの複数のメッセージングプロトコル
- 柔軟な分散スケールアウト展開アーキテクチャ
- 超高速バッチメッセージ交換システム
- SQLやタグなどのさまざまなメッセージフィルタリングメカニズム
- 分離されたテストとクラウドで分離されたクラスター用のDockerイメージ
- 構成、メトリック、および監視のための機能豊富な管理ダッシュボード
- 認証と承認
- ソースとシンク用の無料のオープンソースコネクタ
Rocketmqバックグラウンド管理インターフェイス:
githubアドレス:https ://github.com/apache/rocketmq
Maven中央リポジトリ:https ://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter
Rocketmqには、サーバーとクライアントが含まれます。このプロジェクトでは、主にクライアントのコードに焦点を当てています。
Mavenの依存関係を構成します。
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
4.Arthas
Arthasは、AlibabaのオープンソースJava診断ツールであり、開発者の間で非常に人気があります。
Arthasは、次のような問題で立ち往生しているときに役立ちます。
- このクラスはどのjarパッケージからロードされますか?さまざまなクラス関連の例外が報告されるのはなぜですか?
- 変更したコードが実行されないのはなぜですか?コミットしなかったからですか?分岐が間違っていますか?
- 問題が発生してオンラインでデバッグできない場合は、ログを追加することによってのみ再公開できますか?
- オンラインでのユーザーのデータ処理に問題がありますが、オンラインでデバッグすることもできず、オフラインで再現することもできません。
- システムの状態を確認するためのグローバルな視点はありますか?
- JVMのリアルタイムの実行ステータスを監視する方法はありますか?
- アプリケーションのホットスポットをすばやく見つけて、フレームグラフを生成するにはどうすればよいですか?
- JVM内から直接クラスのインスタンスを見つける方法は?
時間のかかるコード分析:ArthasはJDK 6以降をサポートし、Linux / Mac / Windows、コマンドラインインタラクションモードの使用、問題の特定をさらに容易にする豊富なタブオートコンプリート機能の提供など、さまざまなオペレーティングシステムで実行できます。と診断。
githubアドレス:https ://alibaba.github.io/arthas/
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.taobao.arthas/arthas-spring-boot-starter
ターゲットマシンで次のコマンドを実行して、arthasを起動します。
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
5.ナコス
Nacosは、動的なサービスの検出と構成、およびサービス管理のために設計された使いやすいプラットフォームです。クラウドネイティブアプリケーションとマイクロサービスプラットフォームを簡単に構築するのに役立ちます。
サービスはナコスの第一級市民です。Nacosは、Dubbo / gRPCサービス、Spring Cloud RESTFulサービス、Kubernetesサービスなど、ほぼすべてのタイプのサービスをサポートしています。
Nacosは4つの主要な機能を提供します。
服务发现和服务健康检查
。Nacosを使用すると、サービスが自分自身を登録し、DNSまたはHTTPインターフェイスを介して他のサービスを簡単に検出できます。Nacosは、サービスのリアルタイムヘルスチェックも提供して、異常なホストまたはサービスインスタンスへのリクエストの送信を防ぎます。动态配置管理
。動的構成サービスを使用すると、すべての環境にわたって一元化された動的な方法ですべてのサービスの構成を管理できます。Nacosを使用すると、構成を更新するときにアプリケーションとサービスを再デプロイする必要がなくなり、構成の変更がより効率的かつ機敏になります。动态 DNS 服务
。Nacosは加重ルーティングをサポートしているため、データセンター内の実稼働環境で中間層の負荷分散、柔軟なルーティングポリシー、トラフィック制御、および単純なDNS解決サービスを簡単に実装できます。DNSベースのサービス検出を簡単に実装し、アプリケーションがベンダー固有のサービス検出APIに結合するのを防ぎます。服务和元数据管理
。Nacosは、サービスメタデータ、構成、kubernetes DNS、サービスヘルス、およびメトリック統計を管理するのに役立つ、使いやすいサービスダッシュボードを提供します。
ナコスマップ:
ナコスエコマップ:
githubアドレス:https ://github.com/alibaba/nacos
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery
6. easyexcel
Java解析とExcel生成のより有名なフレームワークは、Apachepoiとjxlです。しかし、それらはすべて深刻な問題を抱えています。つまり、大量のメモリを消費します。Poiには、メモリオーバーフローの問題をある程度解決できるSAXモードAPIのセットがありますが、POIには07バージョンなどのいくつかの欠陥があります。 Excelの解凍と解凍後のストレージの処理。これはメモリ内で実行されますが、メモリ消費量は依然として非常に大きくなります。
easyexcelは、Excelの07バージョンのpoiの分析を書き直しました。3MのExcelは、POIサックスを使用して解析するために約1億のメモリを必要とします。easyexcelを使用すると、数メガバイトに減らすことができます。Excelのサイズがいくら大きくても、メモリはありません。オーバーフロー;バージョン03はPOIのsaxモードに依存しており、モデル変換を上位層にカプセル化して、ユーザーにとってより簡単で便利なものにします。
64Mのメモリは1分以内に75M(46W行と25列)のExcelを読み取ります
githubアドレス:https ://github.com/alibaba/easyexcel
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.alibaba/easyexcel
Mavenの依存関係を構成します。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
7.センチネル
分散システムの普及に伴い、サービス間の信頼性がこれまで以上に重要になっています。
Sentinelは「トラフィック」をエントリポイントとして使用し、トラフィック制御、トラフィックシェーピング、融合、システム適応保護などの多くの分野で機能して、マイクロサービスの信頼性と弾力性を確保します。
Sentinelには次の機能があります。
丰富的适用场景
:SentinelはAlibabaで広く使用されており、システム容量、メッセージのピークと谷を満たすためにバーストトラフィックを制限する必要がある「seckill」など、過去10年間のDouble 11(11.11)ショッピングフェスティバルのほぼすべてのコアシナリオをカバーしています。 、ダウンストリームの信頼性の低いサービスの切断、クラスターフロー制御など。实时监控
:Sentinelは、リアルタイムの監視機能も提供します。単一のマシンのランタイム情報、および500ノード未満のクラスターのランタイム情報の要約をリアルタイムで表示できます。广泛的开源生态系统
:Sentinelは、Spring Cloud、Dubbo、gRPCなどの一般的なフレームワークやライブラリとのすぐに使える統合を提供します。アダプターの依存関係をサービスに追加するだけで、Sentinelを簡単に使用できます。多语言支持
:Sentinelは、Java、Go、およびC++のネイティブサポートを提供します。丰富的SPI扩展
:Sentinelは、カスタムルール管理、データソースの適応など、ロジックをすばやくカスタマイズできる使いやすいSPI拡張インターフェイスを提供します。
機能概要:
生態系の風景:
githubアドレス:https ://github.com/alibaba/Sentinel
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core
Mavenの依存関係を構成します。
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.2</version>
</dependency>
8.カワウソ
アリババB2B企業は、事業の特性上、売り手は主に中国に、買い手は主に海外に集中しているため、杭州と米国のリモートコンピュータルームの需要が生まれています。書かれたので、カワウソなどの商品が誕生しました。
カワウソの最初のバージョンは2004〜05年までさかのぼることができます。外部のオープンソースバージョンは4番目のバージョンです。開発期間は2011年7月から現在まで続いています。現在、Alibaba内のローカル/リモートコンピュータルームの同期要件B2Bは基本的に完成です。otte4で。
現在の同期スケール:
- 同期データ量6億
- ファイル同期1.5TB(2000w画像)
- 200以上のデータベースインスタンス間の同期が含まれます
- 80台以上のマシンのクラスターサイズ
カワウソは何を解決できますか?
-
异构库同步
。mysql-> mysql / oracle。(現在、オープンソースバージョンはmysqlインクリメンタルのみをサポートしています。ターゲットライブラリは、運河の機能に応じてmysqlまたはoracleにすることができます) -
单机房同步
(データベース間のRTT <1ms)a。データベースバージョンのアップグレード
b。データテーブルの移行
c。非同期セカンダリインデックス
-
异地机房同步
(たとえば、Alibaba International Stationは、杭州と米国のコンピューター室の間のデータベース同期です。RTT> 200ms、ハイライト)a。コンピュータルームのディザスタリカバリ
-
双向同步
a。ループバックアルゴリズムを回避します(一般的なソリューション、ほとんどのリレーショナルデータベースをサポートします)
b。データ整合性アルゴリズム(ダブルAコンピューター室内モードでのデータの最終的な整合性を確保するために保証されています。ハイライト)
-
文件同步
サイトミラーリング(データのコピー中に、製品データのコピーや製品画像のコピーなど、関連する画像をコピーします)。
動作原理図:
単一のコンピューター室の複製の概略図:
オフサイトのコンピューター室の複製の概略図:
githubアドレス:https ://github.com/alibaba/otter
Maven中央リポジトリ:https ://mvnrepository.com/artifact/com.alibaba.otter/canal.client
9. P3C
P3Cプラグインは、AlibabaJavaコーディングガイドを提供します。このガイドには、AlibabaGroupの技術チームの長年にわたる最良のプログラミング手法が組み込まれています。互いのプログラムの再利用と理解を深めることを奨励しているため、多数のJavaプログラミングチームがプロジェクト全体のコード品質に厳しい要件を課しています。
アリババは過去に多くのプログラミングの問題を見てきました。たとえば、欠陥のあるデータベーステーブル構造とインデックス設計は、ソフトウェアアーキテクチャの欠陥とパフォーマンスリスクにつながる可能性があります。もう1つの例は、保守が難しい厄介なコード構造です。さらに、認証されていない脆弱なコードはハッカーに対して脆弱です。これらの問題に対処するために、AlibabaのJava開発者向けにこのドキュメントを作成しました。
詳細については、AlibabaJavaコーディングガイドを参照してください。
- 中国語版:AlibabaJava開発マニュアル
- 英語版:AlibabaJavaコーディングガイドライン
プロジェクトは3つの部分で構成されています。
- PMDの実装
- IntelliJIDEAプラグイン
- Eclipseプラグイン
PMDに基づいて49のルールが実装されています。詳細については、P3C-PMDのドキュメントを参照してください。IDEプラグイン(IDEAおよびEclipse)に実装されている4つのルールは次のとおりです。
-
[必須]非推奨のクラスまたはメソッドの使用は禁止されています。注:たとえば、非推奨のメソッドdecode(String encodeStr)の代わりに、decode(String source、String encode)を使用する必要があります。インターフェイスが非推奨になると、インターフェイスプロバイダーは新しいインターフェイスを提供する必要があります。同時に、クライアントプログラマーは、その新しい実装が何であるかを確認する必要があります。
-
[必須]インターフェースまたは抽象クラスからオーバーライドされたメソッドは、 @Overrideアノテーションでマークする必要があります。反例:getObject()およびget0object()の場合、最初は文字「O」で、2番目は数字「0」です。オーバーライドが成功したかどうかを正確に判断するには、@Overrideアノテーションが必要です。同時に、抽象クラスのメソッドシグネチャが変更されるとすぐに、実装クラスはコンパイル時エラーを報告します。
-
[必須]静的フィールドまたはメソッドは、対応するオブジェクト名ではなく、クラス名で直接参照する必要があります。
-
[必須]hashCodeとequalsの使用法は次のとおりです。
- equalsがオーバーライドされた場合、hashCodeをオーバーライドします。
- これらの2つのメソッドは、重複するオブジェクトがセットに挿入されないようにするために使用されるため、セットに対してオーバーライドする必要があります。
- マップのキーとしてカスタムオブジェクトを使用する場合は、これら2つのメソッドをオーバーライドする必要があります。注:これら2つのメソッドはオーバーライドされているため、文字列をマップのキーとして使用できます。
p3cプラグインを使用した場合の効果:
最新バージョンのAlibabaJava開発マニュアルのダウンロードアドレス:https://github.com/alibaba/p3c/blob/master/Java開発マニュアル(Songshan Edition).pdf
githubアドレス:https ://github.com/alibaba/p3c/tree/master/idea-plugin
10.SpringCloudアリババ
Spring Cloud Alibabaは、分散アプリケーション開発のためのワンストップソリューションを提供します。分散アプリケーションの開発に必要なすべてのコンポーネントが含まれているため、SpringCloudを使用してアプリケーションを簡単に開発できます。
Spring Cloud Alibabaを使用すると、Spring CloudアプリケーションをAlibabaの分散ソリューションに接続し、Alibabaのミドルウェアを介して分散アプリケーションシステムを構築するために、いくつかの注釈と少量の構成を追加するだけで済みます。
主な機能は次のとおりです。
流量控制和服务降级
:デフォルトでは、HTTPサービスのフロー制御がサポートされています。注釈を使用して、トラフィック制御とサービス低下ルールをカスタマイズすることもできます。ルールは動的に変更できます。服务注册和发现
:サービスを登録でき、クライアントはSpring管理のBeanを使用して、リボンを自動的に統合してインスタンスを検出できます。分布式配置
:分散システムでの外部構成をサポートし、構成が変更されると自動的に更新されます。事件驱动
:共有メッセージングシステムに接続された、高度にスケーラブルなイベント駆動型マイクロサービスの構築のサポート。分布式事务
:高性能で使いやすい分散トランザクションソリューションをサポートします。阿里云对象存储
:大規模で安全、低コスト、信頼性の高いクラウドストレージサービス。いつでも、どこでも、あらゆるアプリケーションのあらゆるタイプのデータを保存してアクセスできます。阿里云SchedulerX
:応答時間が数秒の、正確で信頼性が高く、可用性の高いスケジュールされたジョブスケジューリングサービス。阿里云短信
:世界中をカバーするSMSサービスであるAli SMSは、便利で効率的かつインテリジェントな通信機能を提供し、企業が顧客に迅速に連絡できるようにします。
主に次のコンポーネントが含まれています。
Sentinel
:トラフィックをエントリポイントとして使用して、トラフィック制御、回路ブレーカーのダウングレード、システム負荷保護などの複数の側面からサービスの安定性を保護します。Nacos
:クラウドネイティブアプリケーションの構築を容易にする動的なサービス検出、構成管理、およびサービス管理プラットフォーム。RocketMQ
:高可用性分散クラスターテクノロジーに基づくオープンソースの分散メッセージングシステムは、低遅延、高信頼性のメッセージ発行およびサブスクリプションサービスを提供します。Dubbo
:ApacheDubbo™は、高性能のJavaRPCフレームワークです。Seata
:Alibabaオープンソース製品、使いやすい高性能マイクロサービス分散トランザクションソリューション。Alibaba Cloud OSS
:Alibaba Cloud Object Storage Service(OSS)は、Alibaba Cloudが提供する、大規模で安全、低コスト、信頼性の高いクラウドストレージサービスです。いつでもどこでも、あらゆるアプリケーションのあらゆるタイプのデータを保存してアクセスできます。Alibaba Cloud SchedulerX
:Alibabaミドルウェアチームによって開発された分散タスクスケジューリング製品。第2レベルで、正確で、信頼性が高く、可用性の高いタイミング(Cron式に基づく)タスクスケジューリングサービスを提供します。Alibaba Cloud SMS
:世界をカバーするSMSサービス、フレンドリーで効率的かつインテリジェントな相互接続通信機能は、企業が顧客との連絡チャネルを迅速に構築するのに役立ちます。
Mavenの依存関係を構成します。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
最後の一言(注意してください、私を売春しないでください)
この記事が役に立った、または啓発的なものである場合は、QRコードをスキャンして注意を払ってください。あなたのサポートは、私が執筆を続ける最大の動機です。
ワンクリックで3つのリンクを要求します:いいね、転送、視聴。