Как да изградите своя собствена Infura на AWS, използвайки без сървър рамка

В една от предишните статии демонстрирахме как да стартирате един главен възел Parity на четността на AWS. В много случаи наличието на един възел на четността ще бъде достатъчно, то със сигурност е необходимо да се разчита на външна обществена инфраструктура, като Infura.

Недостатъци на наличието само на един възел

Въпреки това в много ситуации един възел просто не е достатъчен. Мога да измисля няколко причини, поради които може да се нуждаете от повече от един възел.

  1. Престой. Ако по някаква причина възелът трябва да бъде свален за поддръжка, няма да остане възел. Ще има престой, когато например има нужда от надграждане на версия на Parity.
  2. Изпадане от синхронизиране. Паритетът е страхотен, но не е безупречен. Понякога може да изпадне в синхрон поради различни причини. Наличието на множество възли ни позволява временно да пренасочваме трафика от възли, които са изостанали и да заявяваме възли, които са синхронизирани.
  3. Разпределящ товар. Има само определено ниво на заявки / секунди на json-rpc, което може да поддържа един възел Parity. Json-rpc интерфейсът става бавен на това ниво и възелът Parity изпада от синхронизация. Това е особено важно, ако възелите (ите) се използват от уеб интерфейс и номер на дапп и можете да наблюдавате ежедневни шипове в ангажираността на потребителите.

Инфраструктура на jsonrpc-proxy

Голямата картина на това, което прави прокси, е следната:

  1. Списък на URL адрес на възел на четност трябва да се съхранява в DynamoDB. Има и специален URL адрес, наречен лидер, който сочи към Инфура.
  2. eth_getBlockNumber трябва да се стартира на всеки от възлите от списъка на всеки 60 секунди. Резултатът се сравнява с лидера. За да се счита възелът за здрав, той трябва да реагира и да бъде не повече от 10 блока зад Инфура. Здравословното състояние на всеки възел се запазва в DynamoDB.
  3. Промяната на здравословното състояние на всеки възел задейства регенерация на прокси конфигурация. Прокси конфигурацията е просто nginx .conf файл, който конфигурира услуга по течението, която балансира натоварването между нашите възли. Ако никой от нашите възли не е здрав, генерираната конфигурация изпраща всички искания до Infura asa резервен. Конфигурационният файл се качва в кофа S3.
  4. Качването на конфигурационен файл в кофа S3 задейства актуализация на ECS Service, която изпълнява nginx контейнер с генериран config.

Мониторинг възли

Предимството на използването на AWS услугите е, че те се предлагат с изходни показатели по подразбиране

Искания в секунда

Използвайки вградените показатели ELB, можем да видим ограниченото запитване на заявките, идващи до кодовете на състоянието на прокси на отговор.

Късност към Инфура

Също така jsonrpc-proxy стек изтласква собствените му показатели, които показват различие между всеки номер на блок на възел и Infura.

Брой здрави възли

Друг персонализиран показател показва броя на здравите възли.

Този показател е много полезен за настройка на аларма на CloudWatch.

Разгръщане на вашия собствен jsonrpc-proxy

Кодът на нашето решение може да се намери в git хранилище.

Изградете контейнер ECR с nginx

Нашата услуга изпълнява nginx контейнер на клъстер ECS, който извежда конфигурацията му от S3 кофа. Изображението на тази услуга трябва да е достъпно в някои AWS акаунт като jsonrpc-proxy. Можете да изградите и качите изображение със следните команди:

$ cd докер
$ AWS_DEFAULT_PROFILE = yourProfileName bash -x build_and_upload.sh

Това ще създаде ECR хранилище, ще изгради изображение и ще го избута. В резултат ще видите ARN на създаден ECR хранилище, което трябва да поставите в конфигурационния файл в следващата стъпка.

Написаното по-горе предполага, че използвате именани профили за достъп до командния ред. Ако използвате маркери за сесия, пропуснете частта на профила.

Създайте конфигурационен файл

Стека се прави така, че да използва отново външни ресурси, които трябва да бъдат предадени като параметър в конфигурационния файл. Можете да започнете, като създадете свой собствен конфигурационен файл от предоставения шаблон:

$ cd услуги
$ cp config.yml.sample config.dev.yml # това приема `dev` като име на сцената, което ще бъде използвано по-късно

Редактирайте файла и посочете вътре:

  • VPC, който стартирате в и подмрежата на частни подмрежи
  • Избройте групите за сигурност, позволяващи достъп до всички възли на четността
  • ECS балансиращо натоварване на клъстери и приложения. Стекът не създава нито собствен клъстер, нито балансиращо натоварване, защото обикновено няма да искате да плащате за специални ресурси, само за да стартирате nginx вътре. Моля, обърнете внимание: необходимо е ECS клъстер да се добави към групите за сигурност, позволяващи му достъп до възлите на четността
  • ERC Image ARN създаден в предишната стъпка

Разгърнете стека

Ще трябва да имате инсталиран без сървър на вашата машина.

npm install -g без сървър

След това трябва да инсталирате стека зависимости:

CD услуги
npm инсталиране

След като направите това, можете да внедрите стек във вашия AWS акаунт:

$ AWS_DEFAULT_PROFILE = yourProfileName sls implemen -s dev

Накрая трябва да конфигурирате вашия DNS, за да посочи името, използвано от стека, към вашия балансиращ инструмент за зареждане.

Добавете възли за наблюдение

Следващата стъпка е всъщност да кажете на прокси сървъра кои възли да следят:

Ако всичко свърши добре след минута, трябва да можете да видите, че мониторингът започва и че възлите вече са здрави: