序文Alibaba の素晴らしいオープンソース プロジェクト 10 件を以下に紹介します。 これらのオープンソースプロジェクトのほとんどを仕事で使ったり、同僚が使ったりしています。本当に素晴らしくて価値のあるものなので、皆さんにぜひお勧めします。 1. ドルイドDruidは、強力な監視機能とスケーリング機能を備えた、Javaで最高のデータベース接続プールであると主張しています。監視バックエンドは以下の画像に示されています。 Druid の主な利点は次のとおりです。 - データベースアクセスのパフォーマンスを監視できます。
- SQL インジェクション攻撃から防御するために SQL セマンティック分析を使用する WallFilter を提供します。
- 接続リークを監視するためのさまざまな方法を提供します。
- データベース パスワードの暗号化機能を提供します。
- SQL 実行ログを印刷できます。
GitHub アドレス: https://github.com/alibaba/druid Maven セントラルリポジトリ: https://mvnrepository.com/artifact/com.alibaba/druid
Maven の依存関係を設定します。 <依存関係> <グループID> com.alibaba </グループID> <artifactId> ドルイド</artifactId> < バージョン> $ { druid - バージョン} < / バージョン > < 依存関係>
2. ファストJSON fastjsonは、Alibabaが提供するオープンソースのJSON解析ライブラリです。JSON形式の文字列を解析し、Java BeansをJSON文字列にシリアル化し、JSON文字列をJava Beansにデシリアル化することができます。 fastjson の主な利点は次のとおりです。 - 速いのは速いです。Fastjsonは他のJSONライブラリと比較してその高速性が特徴です。2011年のバージョン1.1.xのリリース以来、そのパフォーマンスは他のJavaベースのJSONライブラリに一度も上回ったことがありません。
- FastjsonはAlibabaの数万台のサーバーで広く利用・導入されており、業界で広く受け入れられています。2012年には、Open Source Chinaによって中国国内で最も人気のあるオープンソースソフトウェアプログラムの1つに選ばれました。
- Fastjson は使いやすく、API は非常に簡潔です。
文字列テキスト= JSON.toJSONString ( obj ) ; VO vo = JSON.parseObject ( "{...}" , VO.class ) ;
- 完全に機能し、ジェネリック、非常に大きなテキストのストリーム処理、列挙、シリアル化およびデシリアル化の拡張をサポートします。
GitHub アドレス: https://github.com/alibaba/fastjson Maven セントラルリポジトリ: https://mvnrepository.com/artifact/com.alibaba/fastjson
Maven の依存関係を設定します。 <依存関係> <グループID> com.alibaba </グループID> <artifactId> fastjson </artifactId> <バージョン> 1.2.76 </バージョン> < 依存関係>
3. ダボApache Dubboは、RPC通信とマイクロサービスガバナンスという2つの主要な機能を提供するマイクロサービス開発フレームワークです。つまり、Dubboを使用して開発されたマイクロサービスは、リモートから相互に検出・通信できるようになります。同時に、Dubboが提供する豊富なサービスガバナンス機能を活用することで、サービス検出、負荷分散、トラフィックスケジューリングといったサービスガバナンス要件も実現できます。 同時に、Dubboは高度な拡張性を備えており、ユーザーはフレームワークのデフォルトの動作を変更し、特定のビジネスニーズを満たすために、事実上あらゆる機能において実装をカスタマイズできます。現在、DubboはApacheによって管理および保守されています。 アーキテクチャ図は次のとおりです。 Dubbo の主な利点は次のとおりです。 - 透過インターフェースに基づくRPC
- インテリジェントな負荷分散
- 自動サービス登録と検出
- 高いスケーラビリティ
- ランタイムトラフィックルーティング
- 視覚化されたサービスガバナンス
- クラウドネイティブ対応
GitHubアドレス: https://github.com/apache/dubbo Maven セントラルリポジトリ: https://mvnrepository.com/artifact/com.alibaba/dubbo/
Maven の依存関係を設定します。 <プロパティ> < ダボ. バージョン> 3.0 .3 < /dubbo.version> </プロパティ>
<依存関係> <依存関係> <グループID> org.apache.dubbo </グループID> <artifactId> ダボ< / artifactId > < バージョン> $ { dubbo . バージョン} </ / バージョン > < 依存関係> <依存関係> <グループID> org.apache.dubbo </グループID> <artifactId> dubbo - 依存関係- zookeeper </artifactId> < バージョン> $ { dubbo . バージョン} </ / バージョン > <type> ポンポン</type> < 依存関係> < 依存関係>
4. ロケットMQ Apache RocketMQ は、低レイテンシ、高パフォーマンスと信頼性、兆レベルの容量、柔軟なスケーラビリティを備えた分散メッセージングおよびストリーミング プラットフォームです。 さまざまな機能を提供します: - パブリッシュ/サブスクライブ、リクエスト/レスポンス、ストリーミングなどのメッセージング パターン。
- 金融グレードの取引メッセージ
- DLedger に基づくフォールト トレランスと高可用性の構成オプションが組み込まれています
- Java、C/C++、Python、Go などの複数の言語間クライアント。
- TCP、SSL、AIO などのプラグ可能なトランスポート プロトコル。
- 組み込みのメッセージ トレース機能があり、OpenTracing もサポートします。
- 多機能ビッグデータとストリーミングエコシステムの統合
- 時間またはオフセットによるメッセージ追跡
- 信頼性の高い 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 の依存関係を設定します。 <依存関係> <グループID> org.apache.rocketmq </グループID> <artifactId> rocketmq - クライアント</artifactId> <バージョン> 4.3.0 </バージョン> < 依存関係>
5. アルサス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 java - jar arthas - boot.jar
6. ナコスNacosは、動的なサービスの検出と構成、そしてサービス管理のために設計された使いやすいプラットフォームです。クラウドネイティブアプリケーションやマイクロサービスプラットフォームを簡単に構築できます。 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
7. イージーエクセルExcelファイルの解析と生成を行うためのJavaフレームワークとして、Apache POIやJXLなどが有名です。しかし、これらにはいずれも深刻な問題があります。それは、大量のメモリを消費することです。POIはSAXモードAPIを備えており、メモリオーバーフローの問題をある程度解決できますが、それでもいくつかの欠点があります。例えば、Excel 2007では、解凍と解凍後の保存はどちらもメモリ内で行われるため、依然としてかなりのメモリ消費が発生します。 EasyExcelは、POIのExcel 2007の解析を書き換えました。3MBのExcelファイルをPOI SAXで解析するには、依然として約100MBのメモリが必要ですが、EasyExcelではこれを数MBにまで削減でき、さらに大きなExcelファイルでもメモリオーバーフローは発生しません。2003バージョンはPOIのSAXモードを採用しており、モデル変換はより高レベルでカプセル化されているため、ユーザーにとってよりシンプルで便利です。 64MBのメモリで75MB(460,000行、25列)のExcelファイルを1分で読み取る GitHub アドレス: https://github.com/alibaba/easyexcel Maven セントラルリポジトリ: https://mvnrepository.com/artifact/com.alibaba/easyexcel
Maven の依存関係を設定します。 <依存関係> <グループID> com.alibaba </グループID> <artifactId> イージーエクセル</artifactId> <バージョン> 2.2.6 </バージョン> < 依存関係>
8. センチネル分散システムの普及が進むにつれて、サービス間の信頼性がこれまで以上に重要になっています。 Sentinel は「トラフィック」に重点を置いており、トラフィック制御、トラフィック シェーピング、回路遮断、適応型システム保護などの複数の領域で動作し、マイクロサービスの信頼性と回復力を確保します。 Sentinel には次の特性があります。 - 幅広い適用シナリオ:SentinelはAlibabaで広く使用されており、システム容量を満たすために突発的なトラフィックを制限する必要がある「フラッシュセール」の制限、メッセージのピークシェービングとバレーフィリング、信頼性の低いダウンストリームサービスの中断、クラスタートラフィック制御など、過去10年間のダブル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 の依存関係を設定します。 <依存関係> <グループID> com.alibaba.csp </グループID> <artifactId> センチネル- コア</artifactId> <バージョン> 1.8.2 </バージョン> < 依存関係>
9. カワウソアリババのB2B事業は、その事業特性上、売り手は主に中国国内、買い手は主に海外に拠点を置いており、杭州と米国にリモートデータセンターを設置する必要がありました。同時に、ユーザーエクスペリエンスを向上させるため、データセンター全体のアーキテクチャはデュアルAを採用し、両側への書き込みが可能になりました。これがOtterのような製品の誕生につながりました。 otterの最初のバージョンは2004年から2005年に遡ります。この外部オープンソースバージョンは4番目のバージョンであり、2011年7月から開発が進められています。現在、Alibaba B2Bのローカル/リモートデータセンター同期のニーズは、基本的にすべてotter4によって処理されています。 現在の同期スケール: - 6億のデータポイントを同期
- 同期されたファイル: 1.5TB (画像2,000万枚)
- 200以上のデータベースインスタンスの同期
- 80台以上のマシンのクラスターサイズ
カワウソは何を解決するのでしょうか? - 異機種データベースの同期。MySQL -> MySQL/Oracle。(現在、オープンソース版では MySQL の増分同期のみがサポートされています。ターゲットデータベースは、Canal の機能に応じて MySQL または Oracle のいずれかになります。)
- 単一部屋の同期 (データベース間のRTT < 1ms)a. データベースバージョンのアップグレード b. データテーブルの移行 c. 非同期セカンダリインデックス
- リモートデータセンター同期 (例えば、Alibaba.comは杭州と米国のデータセンター間でデータベースを同期しており、RTT > 200msという重要な特徴を備えている)a. データセンターの災害復旧
- 双方向同期には、a. ループ回避アルゴリズム (ほとんどのリレーショナル データベースをサポートする一般的なソリューション)、b. データ一貫性アルゴリズム (デュアル A データ センター モードで最終的な一貫性を保証する重要な機能) が含まれます。
- ファイル同期サイトミラー(商品データと商品画像を同時にコピーするなど、データをコピーしながら関連画像をコピーする)。
動作原理図: 単一サーバールームのレプリケーション図: リモート データ センターでのデータ複製の図: GitHubアドレス: https://github.com/alibaba/otter Maven セントラルリポジトリ: https://mvnrepository.com/artifact/com.alibaba.otter/canal.client
10. P3C P3Cプラグインは、アリババグループの技術チームが長年にわたり培ってきたプログラミングのベストプラクティスを統合した、アリババのJavaコーディングガイドラインを提供します。私たちは互いのプログラムの再利用と理解を深めることを推進しているため、多くのJavaプログラミングチームがプロジェクト全体にわたって厳格なコード品質要件を定めています。 Alibabaは過去に多くのプログラミング問題に直面してきました。例えば、データベースのテーブル構造やインデックス設計に欠陥があると、ソフトウェアアーキテクチャ上の欠陥やパフォーマンスリスクにつながる可能性があります。また、乱雑なコード構造を維持することが難しいという問題もあります。さらに、認証されていない脆弱なコードはハッカーに容易に悪用されてしまいます。これらの問題に対処するため、AlibabaのJava開発者向けにこのドキュメントを作成しました。 詳細については、Alibaba Javaコーディングガイドラインを参照してください。 - 中国語版:Alibaba Java開発マニュアル
- 英語版:Alibaba Javaコーディングガイドライン
このプロジェクトは3つの部分で構成されています。 - PMD実装
- IntelliJ IDEA プラグイン
- Eclipseプラグイン
49個のルールはPMDに基づいています。詳細については、P3C-PMDのドキュメントを参照してください。IDEプラグイン(IDEAおよびEclipse)に実装されている4つのルールは次のとおりです。 - [必須] 非推奨のクラスまたはメソッドの使用は禁止されています。注: 例えば、非推奨の `decode(String encodeStr)` ではなく `decode(String source, String encode)` を使用してください。インターフェースが非推奨になった場合、インターフェースプロバイダーは新しいインターフェースを提供する義務があります。同時に、クライアントプログラマーは新しい実装を確認する義務があります。
- [必須] インターフェースまたは抽象クラスからオーバーライドされたメソッドには、`@Override` アノテーションを付与する必要があります。反例: `getObject()` と `get0bject()` で、最初の引数は文字の「O」、2 番目の引数は数字の「0」です。オーバーライドが成功したかどうかを正確に判断するには、`@Override` アノテーションが必要です。また、抽象クラスのメソッドシグネチャが変更された場合、実装クラスは直ちにコンパイル時エラーを報告します。
- [必須] 静的フィールドまたはメソッドは、対応するオブジェクト名ではなく、クラス名で直接参照する必要があります。
- [必須] hashCode と equals の使用は、次のガイドラインに従う必要があります。
- equals がオーバーライドされると、hashCode もオーバーライドされます。
- これら 2 つのメソッドは、重複するオブジェクトが Set に挿入されないようにするために使用されるため、Set に対してオーバーライドする必要があります。
- Mapのキーとしてカスタムオブジェクトを使用する場合は、これら2つのメソッドをオーバーライドする必要があります。注: これら2つのメソッドは既にオーバーライドされているため、StringをMapのキーとして使用できます。
p3cプラグインを使用した効果:
Alibaba Java 開発マニュアルの最新バージョンは、ここからダウンロードできます: https://github.com/alibaba/p3c/blob/master/Java 公開展手册(宋山版).pdf GitHub アドレス: https://github.com/alibaba/p3c/tree/master/idea-plugin
11. スプリングクラウド アリババSpring Cloud Alibabaは、分散アプリケーション開発のためのワンストップソリューションを提供します。分散アプリケーション開発に必要なすべてのコンポーネントが含まれているため、Spring Cloudを使用したアプリケーション開発が容易になります。 Spring Cloud Alibaba を使用すると、いくつかのアノテーションと最小限の構成を追加するだけで、Spring Cloud アプリケーションを Alibaba の分散ソリューションに接続し、Alibaba ミドルウェアを通じて分散アプリケーション システムを構築できます。 主な機能は次のとおりです。 - トラフィック制御とサービス低下:HTTPサービスのトラフィック制御はデフォルトでサポートされています。コメントを使用して、トラフィック制御とサービス低下のルールをカスタマイズすることもできます。ルールは動的に変更可能です。
- サービスの登録と検出: サービスを登録することができ、クライアントは Spring 管理の Bean を使用して Ribbon を自動的に統合し、インスタンスを検出できます。
- 分散構成: 分散システムでの外部化された構成をサポートし、構成が変更されると自動的に更新されます。
- イベント駆動型: 共有メッセージング システムに接続する、高度にスケーラブルなイベント駆動型マイクロサービスの構築を可能にします。
- 分散トランザクション: 高性能で使いやすい分散トランザクション ソリューションをサポートします。
- Alibaba Cloud Object Storage:大規模、安全、低コスト、そして信頼性の高いクラウドストレージサービスです。いつでも、どこでも、あらゆるアプリケーションで、あらゆる種類のデータの保存とアクセスをサポートします。
- Alibaba Cloud SchedulerX: 応答時間が数ミリ秒単位の、正確で信頼性と可用性に優れたスケジュールされたジョブ サービスです。
- Alibaba Cloud SMS: 企業が顧客に迅速に連絡できるように、便利で効率的、かつインテリジェントな通信機能を提供するグローバル SMS サービスです。
主に以下のコンポーネントが含まれます。 - Sentinel: トラフィックを起点として、トラフィック制御、回線遮断と劣化、システム負荷保護など、複数の側面からサービスの安定性を保護します。
- Nacos: クラウドネイティブ アプリケーションの構築を容易にする動的なサービス検出、構成管理、およびサービス管理プラットフォーム。
- RocketMQ: 高可用性の分散クラスタ テクノロジに基づいて、低遅延で信頼性の高いメッセージ公開およびサブスクリプション サービスを提供するオープン ソースの分散メッセージング システムです。
- Dubbo: Apache Dubbo™ は、高性能な Java RPC フレームワークです。
- Seata: Alibaba のオープンソース製品。使いやすく高性能なマイクロサービス分散トランザクション ソリューションです。
- Alibaba Cloud OSS:Alibaba Cloud Object Storage Service(OSS)は、Alibaba Cloudが提供する大規模、安全、低コスト、そして信頼性の高いクラウドストレージサービスです。あらゆるアプリケーションで、いつでもどこでも、あらゆる種類のデータを保存・アクセスできます。
- Alibaba Cloud SchedulerX: Alibaba のミドルウェア チームによって開発された分散タスク スケジューリング製品で、第 2 レベルの正確で信頼性が高く、可用性の高い時間指定 (Cron 式ベース) のタスク スケジューリング サービスを提供します。
- Alibaba Cloud SMS: ユーザーフレンドリーで効率的、かつインテリジェントな相互接続通信機能を備えたグローバル SMS サービス。企業が顧客へのアウトリーチ チャネルを迅速に構築するのに役立ちます。
GitHub アドレス: https://github.com/alibaba/spring-cloud-alibaba
Maven の依存関係を設定します。 <依存関係管理> <依存関係> <依存関係> <グループID>com.alibaba.cloud</グループID> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <バージョン>2.2.6.RELEASE</バージョン> <type>ポンポン</type> <scope>インポート</scope> </依存関係> </依存関係> </依存関係管理>
|