1: ما هو Hystrix
في بيئة موزعة ، ستفشل بعض تبعيات الخدمات في كثير من الأحيان. Hystrix عبارة عن مكتبة تساعدك على التحكم في التفاعل بين هذه الخدمات الموزعة عن طريق إضافة التسامح بين الكمون وتسامح الخطأ. يعمل Hystrix على تحسين المرونة الإجمالية للنظام من خلال عزل نقاط الوصول بين الخدمات ، ووقف حالات الفشل المتتالية بينهما ، وتوفير خيارات احتياطية.
تم تصميم Hystrix للقيام بما يلي
1: توفير حماية والتحكم في زمن الوصول وإخفاقات التبعيات التي يتم الوصول إليها من خلال مكتبات عملاء الطرف الثالث (عادة عبر الشبكة).
2: عزل حالات الفشل المتتالية في الأنظمة المعقدة الموزعة.
3: اكتشف الخطأ بسرعة واستعادة في أقرب وقت ممكن.
4: الترجيع والخفض بأمان قدر الإمكان.
5: تمكين بالقرب من المراقبة في الوقت الفعلي والتنبيهات والضوابط التشغيلية.
2: لماذا تحتاج Hystrix؟
في نظام موزع كبير ، يعتمد العميل أو الخدمة على الخدمات الخارجية. إذا انخفضت الخدمة ، فقد قمنا بتعيين وقت مهلة نظام مكالمات الخدمة ، والذي سيؤثر حتماً على الوقت المقابل. في حالة التزامن العالي ، سيتم حظر مجموعة الخيوط لمعظم الخوادم (كتلة) ، مما يؤثر على استقرار الخدمة عبر الإنترنت بأكملها.
(صور رسمية للصور)
عندما يكون كل شيء صحيًا ، يمكن أن يبدو الطلب هكذا
عندما تنخفض أحد أنظمة خدمة الواجهة الخلفية العديدة ، يطلب المستخدم بأكمله:
إذا اتصل العديد من العملاء بنفس خدمة الاستثناء ، فإن الموقف يحدث:
3: ما هي المشكلات التي يحلها Hystrix؟
تحتوي التطبيقات في البنية الموزعة على عشرات التبعيات ، وسيكون لكل تبعية حتما استثناء في مرحلة ما. إذا لم يكن التطبيق معزولًا عن هذه الإخفاقات الخارجية ، فقد يحدث حظر تجمع الخيوط ، مما يؤدي إلى انهيار النظام.
على سبيل المثال ، بالنسبة للتطبيقات التي تعتمد على 30 خدمة ، فإن كل خدمة تتمتع بوقت التشغيل بنسبة 99.99 ٪ ، يمكنك:
99.99 ٪ من الطاقة من 30 = 99.7 ٪ وقت التشغيل
0.3 ٪ من 1 مليار طلب = 3،000،000 فشل
2+ ساعات توقف/شهر ، حتى مع وجود جميع التبعيات في مرمى التشغيل.
عند استخدام Hystrix لكسر الدائرة ، يتم عزل كل تبعية عن بعضها البعض ، مما يحد من الانسداد عند حدوث التأخير.
الرابع: Hystrix مع Feign
إنشاء مشروع eureka_feign_hystrix_client
محتوى ملف pom.xml
<ependencies> <Rependency> <roupiD> org.springframework.cloud </groupId> <StifactId> spring-cloud-starter-feign </inchifactid> </sependency> <redence> <roupid> org.springframework.cloud </groupid> <roupl> org.springframework.boot </groupId> <StifactId> Spring-boot-starter-web </shintifactid> </breymed> <redence> <roupiD> org.springframework.boot </groupid> <Gropled> org.springframework.boot </rougiD> <StifactId> Spring-Boot-Starter-Test </artifactid> <scope> اختبار </scope> </repreadency <StifactId> تعتمد على السحابة النابضة </artifactid> <splex> brixton.sr5 </version> <type> pom </type> <scope> استيراد </scope> </sependency> </respensions> </spenseManagement>
إنشاء ملف بدء التشغيل
FeignHystrixapplication
@springbootapplication@enableScoveryClient@enablefeignclientspublic class feignhystrixapplication {public static void main (string [] args) {springapplication.run (feignhystrixapplication.class ، args) ؛ }}فئة userclient
@dignclient (value = "biz-service-0" ، fardback = userClientHyStrix.Class) واجهة عامة userClient {REquestMapping (method = requestMethod.get ، value = "/getUser") المستخدم العام getUserInfo () ؛ requestmapping (method = requestMethod.get ، value = "/getUser") السلسلة العامة getUserInfoStr () ؛ requestmapping (method = requestMethod.get ، value = "/info") info info info () ؛}إنشاء فئة فلاش فئة userclienthystrix
servicepublic class userClientHyStrix تنفذ userClient {Override المستخدم العام getUserInfo () {رمي nullpointerxception جديد ("المستخدم getUserInfo () خدمة غير متوفرة ..") ؛ } Override public string getUserInfoStr () {return "userClientHyStrix getUserInfoStr () خدمة عكسية غير متوفرة .." ؛ } Override public string info () {return "userClientHyStrix Info () خدمة احتياطية غير متوفرة .." ؛ }}عندما يحدث استثناء في الشبكة ، قد يقفز مباشرة إلى فئة التنفيذ هنا
إنشاء فئة عمل
UserController
AUTOWIRED userclient userclient ؛ requestmapping (value = "/getUserInfo" ، method = requestMethod.get) المستخدم العام getUserInfo () {return userClient.getuserInfo () ؛ } @requestmapping (value = "/getUserInfoStr" ، method = requestMethod.get) السلسلة العامة getUserInfoStr () {return userclient.getuserInfoStr () ؛ } @requestmapping (value = "/info" ، method = requestMethod.get) info info () {return userclient.info () ؛ }ابدأ مشروع: Eureka_register_service (مركز التسجيل)
ثم قم بتشغيل feignhystrixapplication التي كتبناها
في هذا الوقت ، من الواضح أننا وجدنا أن خدمة الخدمة Biz-0 لم تكن تعمل ، لذلك نفتح http://127.0.0.1:8005/getuserinfostr
يظهر
userClientHyStrix getUserInfoStr () تعطل الخدمة غير متوفرة. .
هذه هي نتيجة إرجاع الدائرة المخصصة لدينا
إذا لم تكن بحاجة إلى كسر الصفحة ، فسيظهر هذا
تطبيق خطأ Whitelabel ليس لديه رسم خرائط صريح لـ /error ، لذا فأنت ترى هذا على أنه احتياطي.
عنوان الرمز: https://github.com/zhp8341/springclouddemo
لقد قرأت أيضًا بعض المبادئ المتعلقة بالهرستريكس. منذ أن لم أنتهي من قراءتهم جميعًا ، لم أكتبهم بعد. يعتمد هذا المقال على استخدام Feign وتعلمه.
إذا كنت مهتمًا ، فيمكنك الاطلاع على تفاصيل Hystrix الرسمية ، ولكن يبدو الأمر صعبًا بعض الشيء.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.