مساء الخير يا هبر!غالبًا ما أبدأ الصباح بإلقاء نظرة على هبر وقررت أخيرًا المساهمة في عملية تعلم الأشياء المثيرة للاهتمام هذه. إذا سارت الأمور على ما يرام ، فهذه هي أول مقالة لي من دورة استخدام لغة
GO في أنظمة الإنتاج. أريد أن أخبركم ببعض التفاصيل الدقيقة المتمثلة في إنشاء التطبيقات والخوادم وراحة اللغة وسرعة تطويرها. ربما بالنسبة للمهنيين ، ستبدو هذه المقالة مملة وليست مثيرة للاهتمام ، ولكن قراءة الأدب لم أجد صورة عامة لحل مشاكل الإنتاج. على الرغم من أن معظم المهام يتم حلها بنفس الطريقة. في هذه المقالة سوف أصف المبادئ العامة لبناء الخادم ، وكمثال على ذلك ، سأستخدم الخادم للتحقق من صحة وعرض الرموز البريدية للبريد الروسي. ستغطي هذه المقالة المشكلات العامة الأكثر دقة والمنهجية التي واجهتها عند إنشاء هذا النظام. لن أصف الإعدادات العامة ، فهناك العديد من هذه الإعدادات على الشبكة ، أريد فقط التركيز على الأشياء الصغيرة التي حالت دون إطلاق المشروع.

بدلا من الانضمام
عند قراءة هبر ، غالبًا ما واجهت مهمة التحقق من الصحة - التحقق من صحة إدخال المستخدم للمعلومات. كل مؤلف حل هذه المشكلة بطريقته الخاصة. لقد استخدمت خدمة خارجية أو كتبت الخادم الخاص بي. أقترح حلا آخر لهذه المشكلة - إنشاء خدمة الدليل. الدلائل هي الخوادم التي تحتوي على معلومات ذات اتجاه معين والتي يمكن تمييزها إلى نظام فرعي مستقل ومستقل. عادة ، يتم استخدام الدلائل لمساعدة المستخدم على ملء والتحقق من صحة المعلومات التي تم إدخالها. مثال على هذه الدلائل هو خدمات الطلبات الإقليمية ، طلبات المدن ، KLADR ، الرموز البريدية ، أدلة GAIS (أنظمة المعلومات الآلية الحكومية). تتبادل جميع الأنظمة الحالية تقريباً بيانات REST باستخدام إما json أو الصابون. سأحاول تحديد نموذج لتطوير مثل هذه الدلائل ، مما سيؤدي إلى إنشاء مثل هذه الأنظمة بسرعة. وضعت على جيثب مصادر مشروعي الداخلي.
اختيار النظم. السؤال الذي يطرح نفسه على الفور لماذا GO؟ لماذا لينكس؟ وأي لينكس؟
لذلك دعونا نبدأ بالترتيب. يعتمد نظامنا الحالي على منتجات من 1C ، وهي BUS وبوابة الشركات. لتوحيد نظام التشغيل ، اخترنا من تثبيت 1C الموصى بها - وهي Linux OS CentOS. يتم تشغيل البرامج النصية لبدء تشغيل بيئة الويب 1C على نظام التشغيل هذا. لم يتم النظر في نظام التشغيل ويندوز. لا أستطيع أن أقول أنني أحب الخيار ، وسأختار ديبيان ، لكن ذلك حدث. لقد احتجنا إلى التوحيد ، نظرًا لأن لدينا تاريخًا حديقة حيوانات كبيرة ، ومختلف بنيات OS Linux و OS FreeBSD و OS VxWorks. وفي رأيي ، أسرع نظام التشغيل Linux CRUX.
مثل العديد من المشاريع ، نما النظام الذي تم إنشاؤه في 1C إلى بوابة كبيرة وأصبح من الضروري عزل النظام و / أو استكمال النظام بمختلف الخدمات - كتب مرجعية. عند تحليل عروض وقدرات الخدمات التي تم إنشاؤها بالفعل ، وكذلك احتياجاتنا لهذه الأدلة ، توصلنا إلى استنتاج مفاده أن الدليل:
- خدمة الخادم المستقل
- يحدث تبادل البيانات على REST؛
- لديه القدرة على التوسع أفقيا.
- يجب تقديم البيانات بسرعة ، وإن كانت زائدة عن الحاجة ، ومعالجة على منتجات 1C ؛
- إعادة بناء المنطق استنادًا إلى تحديات العمل الجديدة ؛
وفقًا للمعايير المذكورة أعلاه وسهولة دخولها ، تم اختيار Go لكتابة الكتب المرجعية. وبالإضافة إلى ذلك:
- انتقل إلى اللغة باستخدام برنامج التحويل البرمجي وتتيح لك تضمين مقتطفات برمجية في لغة C ؛
- البرنامج عبارة عن ملف واحد مع جميع المكتبات (لا توجد مشكلة في توافق المكتبات بعد التجميع) ؛
- مجتمع كبير (العديد من الأمثلة والحلول الجاهزة) ؛
أي أن Go مناسبة تمامًا لإنشاء الدلائل. من نفسي سأضيف أن php و Go متشابهان بعض الشيء ، مما يسمح لك بدعم الأنظمة المكتوبة بهذه اللغات. يحتوي تطبيق Go أيضًا على عدد كبير من الحلول التي تسمح لك بتجميع هذه الحلول بسرعة لمهامك ، أي كيفية تجميع نموذج للمنزل من مكعبات المصمم. لذلك دعونا ننتقل إلى الممارسة.
GO. تثبيت وبحث المكتبات أو الحلول
لتثبيت ، تحتاج إلى تنزيل الأرشيف من
صفحة التنزيل وفك ضغطه إلى مجلد التثبيت ،
سأستخدم / usr / local .
wget https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz tar -C /usr/local -xvzf go1.12.1.linux-amd64.tar.gz
أريد أن
أنتبه ، Go ينقسم إلى فئتين ، الأولى - لغة
الترجمة نفسها والمكتبات المضمنة في التجميع (
GOROOT ) ، والثانية - هذه مكتبات إضافية قمت بتثبيتها وستقوم بإنشاء مشروعك (
GOPATH ). إعداد البيئة وإعداد مجلد التطوير ،
سأستخدم / home / gouser / . إضافة
/ الخ / الملف الشخصي أو إلى
ملفك الشخصي .
export GOPATH=/home/gouser export GOROOT= /user/local/go/ export PATH=$PATH:/usr/local/go/bin
تحضير مجلد لمشروعك:
mkdir -p /home/gouser/{bin,pkg,src}
ثم كل شيء بسيط لمشروعنا ، إنشاء مجلد في src ، إنشاء ملفات بملحق go وتجميع المشروع:
go build
توصيات لإنشاء مشروع. توصيات عامة
- بالنسبة لمشروع github ، من الأسهل إنشاء مجلد لمشروع src / github.com / <اسم المشروع> ؛
- تصميم المشروع كحزمة ، والتعليق على كل إجراء هو وسيلة للحصول على وثائق برنامج جاهزة في godoc بسهولة ؛
- قم بإخراج المتغيرات العامة في وحدة نمطية منفصلة وقم بتوصيلها إذا لزم الأمر (يشبه القالب وحده) ؛
يمكن العثور على الأمثلة والمكتبات
المعدة مسبقًا في
libs.garden . تركيب الأمثلة وجدت
go get < > , github.com/labstack/echo
بعد تثبيت
Go ، دعنا ننتقل إلى مثال. يمكنك تنزيله وتثبيته للتجميع باستخدام الأوامر:
go get github.com/julienschmidt/httprouter go get github.com/LindsayBradford/go-dbf/godbf go get github.com/go-sql-driver/mysql go get github.com/julienschmidt/httprouter cd /home/gouser/go/src/github.com/ git clone https://github.com/Theo730/postcode.git postcode
بيان المشكلة
من الضروري إنشاء دليل للعمل مع الرموز البريدية عن طريق البريد الروسي ، والذي سوف يحل المشاكل التالية:
- التحقق من صحة الرموز البريدية ؛
- القدرة على الحصول على قائمة بجميع الكائنات المحاسبية (المناطق ، المدن ، إلخ) ؛
- الحصول على جميع المؤشرات في موضوع المحاسبة للمدن والمناطق والمناطق ...
- من أعلاه ، لتبادل البيانات عبر REST في شكل json.
مهمة البحث
تحتاج أولاً إلى تهيئة قاعدة البيانات ، ثم إنشاء خادم طلب لقاعدة البيانات هذه. تحتاج إلى قاعدة بيانات الرمز البريدي. البحث هو
vinfo.russianpost.ru/database/ops.html . قاعدة في FoxPro وفي أرشيف مضغوط. الكائنات المحاسبية التالية موجودة في قاعدة البيانات:
- المنطقة؛
- اوبلا المستقلة
- المجال؛
- الموقع؛
- الرمز البريدي.
للتهيئة على
libs.garden ، نجد مكونات وأمثلة للعمل مع قاعدة البيانات والرمز البريدي. نحن نأخذ
httprouter كموجه طلب. نحن نتواصل مع المشروع
عند فحص ملف قاعدة البيانات ، تم العثور على أنه
لم يتم تحديد كل كائنات المحاسبة ، أي أن قيم الصفر موجودة في العينة.
الحل والتنفيذ
أقوم بإعداد كائنات محاسبية في تسلسل هرمي عند تهيئة قاعدة البيانات ، وإذا كان كائن المحاسبة صفراً ، فسيتم أخذ الاسم من الأصل. إيديولوجية الخادم - تأتي الطلبات إلى
الرئيسي (هنا موجه الطلب) وتتم إعادة توجيهها إلى
المعالجات (هنا جميع عمليات تدقيق البيانات والتحويل وما إلى ذلك). من
معالجات يتم تنفيذ جميع الطلبات إلى
قاعدة البيانات والحسابات وتنفيذ معالجات سحب المعلومات الواردة. يتيح لك هذا
التحلل فصل الاستعلامات في قاعدة البيانات والحسابات والتحقق من المعلومات المدخلة والمخرجات الموجودة. من حيث المبدأ ، كل شيء.
بدلا من المجموع
تبين أن المرجع الوظيفي أكثر تعقيدًا من
KLADR . لا يسمح لك فقط بإنشاء مدقق أو دليل على الموقع ، ولكن أيضًا بإنشاء خوارزمية للأعمال الإقليمية.
إذا كان هناك خدمات بيع أو توزيع أعمال إقليمية يتم تسجيل الموزعين في المناطق على البوابة ، ويشير إلى المنطقة التي سيوفرون فيها الخدمة أو يبيعون السلع ويتم تعيين مجموعة من الرموز البريدية الخاصة بهم. عند طلب خدمة أو منتج ، يشير العميل إلى الرمز البريدي ، ويتم إرسال طلبه إلى وكيله الإقليمي (هنا يمكنك إنشاء خوارزمية معقدة). قائمة طلبات
REST قيد
github في وثائق المشروع.
و bitrix قليلا
يمكن توصيل هذا المرجع بأي مشروع أو إطار عمل ، ولكن نظرًا لأن لدينا bitrix ، فقد وضعت وحدة لإضافة مدقق إلى نماذج الويب للمكونات القياسية.
ينقسم تثبيت
PS Server إلى 3 مراحل. يتم ذلك بسبب تقادم قاعدة البيانات من موقع vinfo.russianpost.ru وبسبب قيود الترخيص. قاعدة البيانات نفسها ليست ملكيتي ، إذ تستخدمها ، فإنك تقبل سياسة الترخيص أعلى الموقع المعلن.
خوادم
PSS التي تم إنشاؤها في مشاريعي الخاصة بقطاع الشركات وتحت الظروف ، يجب ألا تنتقل عبر الإنترنت. يمكن تعديل الرمز لمهامك المحددة. نحن لا نستخدم الوصول الخارجي لمشاريعنا. المشاريع التالية التي أود وصفها هي CLADR كاملة ومحلل لبروتوكولات الراديو. التالي في السطر هو Bitrix24 + النجمة. يرجى التعليق على من هو أكثر إثارة للاهتمام.