ナコスダボ2.7.4.1のアップグレードの円滑な移行

ダボは非常に良いタイプのRPCサービス管理フレームワークであり、巨大なシステムアーキテクチャ、絶妙なモジュール設計、柔軟なSPIのデザイン、豊富なコンポーネントを実装することを優れたダボ、マイクロブロガーのサービス技術選択の研究のダボの時間を行います、ダボの下で建築設計原理を学ぶ、人々はあなたが建築を勉強したいときに、すべての人が言うの後ろに、私はダボコードを読むために彼を推薦することを、このような優れたプロジェクトを成長させることができたその時に驚きました。多くの場合、ダボが原因でより顕著なRPC通信の彼のサービスガバナンス特性のちょうどRPCフレームワークは、相対的で、この機能は2017年に私を聞かせて、選択が決定的に彼を選んだとき、その時点で正式にはダボなかったではないと述べました出力春ブーツスターター、そして私たちのプロジェクトは、主に春ブーツプロジェクトに春のMVCからの転換を完了しました。統合ダボコンポーネントの開発を簡素化するために、春・ブート・ダボ・スターターコンポーネントのセット、およびカスタムダボサービス曝露とノートの導入から我々の研究dubbo2.5.6版、カスタマイズされたダボコンフィギュレーション・リロードモードに基づきます。何のプロの運用・保守は、リソースを費やしてきたZKは、いくつかの簡単なコンポーネントを維持するために、我々は直接の登録センターダボとしてのRedis(アリ雲高可用性インスタンス)選出された、高可用性を構築するために、ありませんでした。そして今回、我々は背景ダボをアップグレードすること

なぜ2.7.4.1へのアップグレード?

  • 2.5.6から2.7.35に、中間の修正バグの多くは、新機能の多くをもたらしました。
  • 同様に3.0にメインメンテナンスの現在のバージョンを探るよう2.5.xのバージョンは、メンテナンスバージョン、2.6.xのと2.7.35バージョンとして保持されていません。つまり、将来の2.5.xのに問題がある場合でも、公式は修理しませんA。
  • 2.7.4.1バージョンには、ダボの公式問題やフォーカスグループの状況の後に研究した後、選ばれたこのバージョンは比較的安定しているが、政府はまた、このバージョンにアップグレードすることを推奨していることが判明しました。

なぜナコスに移行レジストリ?

  • 現在でも旅行ピットの後の後、レジストリRedisの「ダボRedisのは、一連の問題を使用してレジストリを、」安定したが、公共が小さすぎるため、あまりにも少数の人々が使用しないアップグレードの過程で暴露多くの問題(原因私はそれがRedisのレジストリを使用し続けた場合、常に自分自身を救い出すことができない連続自己旅ピットのプロセスになります、)問題は、レジストリをRedisの発見しました。
  • ナコスそれはまだ反復を実行しているが、レジストリは、公式のダボプロジェクトの主な推進力であるが、問題は、公式です一度反応は非常にタイムリーです。あまり使用ナコスより多くの人々、ピットへの倍に相当する、どこにもいない隠されたバグを非表示にします。そして、ナコスとダボは、自然の親族を持っている最近のリリースナコスケースを表示し、いくつかの特別な問題のダボを修正するために登録があることがわかりました
  • ダボガバナンス・センターを使用するために、単純なとして使用することができダボナコスは、Web管理コンソールが付属して、クエリの登録に非常に便利です

二つのアップグレードプログラム

我々は現在、彼らの春-ブートダボ-スターターを維持しているので、アップグレードを行うときに、そう、私たちは二つの異なるアップグレードシナリオを持っていた、との完全な検証を行っています。

プログラム:スターター組立マジックチェンジ公式

認知の基本的な非アップグレードバージョン2.7.4.1の開発側を行うために、我々は2つのことをしました

  • 互換性のあるノート

互換性の注釈を行う際にも、2つの選択肢が考えられ、1スタータの自己開発に互換dubbo2.7.4.1の処理を行うことです、一つは2.7.4.1の公式スターターの私たちのプロセスと互換性があります。dubbo2.7.4.1バージョンはブラックボックスであるため、バック決定的に、後者を選んだの前方互換性の困難、下位互換性が私たちのためにはるかに簡単にする必要があり、変更するのか分かりません。当社独自のカスタム公式スタータープロジェクトの完全なコピーを保持パッケージパスの研究コンポーネントから注釈し、その後ReferenceAnnotationBeanPostProcessorとServiceAnnotationBeanPostProcessorはダボから春のモジュールを移動し、カスタムは、互換性のアノテーションを処理しました。この場所は、再び自慢ダボ設計の下では、Apacheに寄贈した後ダボは、パッケージ名は、古いAlibabaのパッケージ、サービスの露出の下で互換性のメモのため、変更されているとサービスの導入が非常に簡単な注釈互換性のあるデザインを行っています。これのおかげで、我々はノート互換性のある処理を取得するためにカスタマイズすることは非常に簡単行っています。

ReferenceAnnotationBeanPostProcessorコンストラクタの着信カスタム注釈:

    public ReferenceAnnotationBeanPostProcessor() {
        super(AutowiredDubbo.class, Reference.class, com.alibaba.dubbo.config.annotation.Reference.class); } 

ServiceAnnotationBeanPostProcessorをスキャンするときにカスタム注釈のサポートを追加

        scanner.addIncludeFilter(new AnnotationTypeFilter(www.zhuyngyule.cn Service.class));

        /**
         * Add the compatibility for legacy Dubbo's @Service * * The issue : https://github.com/apache/dubbo/issues/4330 * @since 2.7.3 */ scanner.addIncludeFilter(new  www.yixingylzc.cn AnnotationTypeFilter(com.alibaba.dubbo.config.annotation.Service.class)); // 兼容@DubboService注解 scanner.addIncludeFilter(new AnnotationTypeFilter(DubboService.class)); 

改革を達成することができ、私たちの魔法のプロセッサ内に露出し、サービスサービスの最終更新DubboAutoConfiguration

  • 互換性の設定

自己構成のカスタム研究はspring.dubboを開始するとロードされ、クラウンは、次のように区別始まるダボです。

自研的配置:
spring.dubbo.application.name = xxx
spring.dubbo.registry.address = xxx spring.dubbo.protocol.port = -1 官方starter配置 dubbo.application.name = xxx dubbo.registry.address = xxx dubbo.protocol.port = -1 

:互換性の設定、変更した構成ダボスターターローディングロジックを達成するようなばね開始、変性DubboUtils filterDubboPropertiesを除去

    public static SortedMap<String, Object> filterDubboProperties(ConfigurableEnvironment environment) {
        SortedMap<String, Object> dubboProperties = new TreeMap<www.javachenglei.com>(); Map<String, Object> properties = EnvironmentUtils.extractProperties(environment); for (Map.Entry<String, Object> entry : properties.entrySet()) { String propertyName = entry.getKey(); if (propertyName.startsWith(DUBBO_PREFIX + PROPERTY_NAME_SEPARATOR) && entry.getValue(www.tengyueylzc.cn) != null) { dubboProperties.put(propertyName, entry.getValue().toString()); } if (propertyName.startsWith("spring." + DUBBO_PREFIX + PROPERTY_NAME_SEPARATOR) && entry.getValue(www.shentuylgw.cn ) != null) { propertyName = propertyName.substring(7); dubboProperties.put(propertyName, entry.getValue().toString()); } } return Collections.unmodifiableSortedMap(dubboProperties); } 

PWへの最後のパッケージのアップロード、開発者は、唯一の魔法の場所は、コードがこのことを考えに上記の投稿が、ここではリード線より変更される可能性があり、動きはダボのバージョン2.7.4.1にアップグレードすることができません瓶次のバージョン、構成、およびコードをアップグレードする必要がありますこれは、プログラムの最後で、このプログラムの利点はナコスの段階への移行が会談への第二の選択肢、同じであるため、より透明開発することです

オプションII:公式スターターアセンブリの直接使用は - 最終的に採択されました

人手の入力なしにバージョンアップに続いて、最終的な議論の下、正式なアップグレードリンクアップグレード公式スターター直接アップグレードを使用して、ボードの変換コード変換構成横切って直接Aの痛みなどの多くの問題であろうときに、アカウントに内部メンテナンスリリースを取って、一貫して自己啓発の公式を維持します。

最初のステップ:Mavenを頼る導入

依存公式ダボスターター

<dependency>
    <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.4.1</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.www.feishenbo.cn</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0<www.lecaixuanzc.cn /version> </dependency> <!-- 注意,引入dubbo官方依赖后,需要同时挪除我们维护的starter包--> 

ステップ2:関連ノートの変換

  • @EnableDubboに@EnableDubbo [org.apache.dubbo.config.spring.context.annotation.EnableDubbo]、そのようなものとして、scanBasePackagesパッケージパスを追加提案:ダボを有効にすると@EnableDubbo(scanBasePackages = "cn.keking.service") 。スキャンサービスのスピードとダボを改善するには、サービスを導入するために暴露されると
  • サービスが公開されている場合:@DubboServiceを@Service] [org.apache.dubbo.config.annotation.Serviceへ
  • ここで注意すべき@Reference] [org.apache.dubbo.config.annotation.Reference、三点に@AutowiredDubbo:サービスに導入されたとき

アプリケーションの起動に影響を与える1、導入公式スターター・デフォルト・サービスが例外をスローするために、サービスの存在を確認します、あなたはデフォルトの動作をオーバーライドするには、グローバル・コンフィギュレーションを追加することができ、何も設定されていない、次のとおりです。dubbo.consumer.check =偽

図2に示すように、例えば秒などのパラメータタイムアウトスタータRESEARCH @AutowiredDubboので、ミリ@Reference公式注釈パラメータは、先にタイムアウト= 30、公式スターターわずか30ミリ秒で、その後のタイムアウトを構成しました。

あなたのURLがまったく同じである一方、マルチレジストリを使用して、ダボサービスは、2つの登録センターから同時に導入されるであろう3も、そうあなたはフォールトトレラントモードがモード(放送され、局部的に2つのサービスインスタンスを持っています消費者は、プロデューサが二回質問を受けたら(クラスター=「フォーキング」)がトリガーされたときにクラスタ=「ブロードキャスト」)またはパラレルモードが生成されます。フェイルオーバーのデフォルトのクラスター政策は、この問題を持っていない、ランダムな方向通話の正常な負荷がかかります。そこにブロードキャストモードである、またはパラレルモードを使用する場合は、あなたがナコス登録センターを設定することができ、登録は消費者だけではありません。設定としては、以下の、その他のサービスはとてもタイムリーナコス後に設定を削除するに移動されていますdubbo.registries.nacos.parameters.subscribe =偽を

第三段階:構成変更ダボ

春の取り外しにプレフィックス、ノートをアップグレード公式スターターたら、必要性は、接続プール・サイズのRedisを設定するための設定、公式デフォルト8を追加することを、dubbo.registries.redis.parameters.max.total = 200

以下は、アップグレードされたコンフィギュレーション・ダボを示しています。

dubbo.application.name = xxx
dubbo.protocol.port = -1
dubbo.provider.timeout = 300000
dubbo.consumer.check = false
dubbo.registries.nacos.address = nacos://xxx:80
dubbo.registries.redis.address = redis://xxx:6379 dubbo.registries.redis.parameters.max.total = 200 

ナコスレジストリへの移行をスムーズに

次のようにダボ支持体を用いたマルチレジストリ機能、滑らかにRedisのナコス、第一段階からの移行には、2つの相は、アップグレードが配置され、登録センターをRedisのデュアル登録センター、第二相、遷移を除去するために構成変更します:

dubbo.registries.nacos.address=nacos://www.jianjiylzc.com xxx:80
dubbo.registries.redis.address=redis://www.jiaaoylzc.cn  xx:6379

なお、問題のいくつかそれ

  • 制御へDB Redisの環境によって区別のRedisの唯一のインスタンスがある場合、Redisのレジストリを使用する場合は、例えば次のように

dubbo.registry.parameters.db.index = 2

  • そして、ナコスは、名前空間の特定の構成によって区別レジストリは次のとおりです。

dubbo.registry.parameters.namespace = www.pingguoyul.cn XXXXXX

  • それは、マルチレジストリ構成であれば、関連するレジストリ接頭語の使用を注意してください、など:dubbo.registries.nacos.parameters.namespace = adefa98f-f4d9-4af8-9eb3-e0cab5a39cc7

エピローグ

ダボアップグレードプログラムは簡単ですが、実際にアップグレード移行を円滑することは容易ではない、またはこの安定した時に多くの問題が発生した連続最適化プロセスです。今まで、私たちは、生産上のボード全体に広がっていないが、確認しない生産、アップグレードのリスク、必要性への個々のアプリケーションは注意深く、慎重に

おすすめ

転載: www.cnblogs.com/laobeipai/p/12636671.html