Міжрегіональні одноядра на периферії

Схоже, що сьогодні кожна цікава компанія займається міжрегіональною геомаршрутизацією для програм. Багато хто з них називатиме це «край». Для таких людей, як я, перевага зазвичай означає щось інше, наприклад наявність справжніх пристроїв у морі, у повітрі, на вежі стільникового зв’язку, у Tesla тощо, але якщо ви зі світу CDN, це означає наявність кількох точок POP. (точка присутності) поширюється по всьому світу, де ви можете розміщувати зазвичай статичні сайти (наприклад, javascript, css тощо) ближче до кінцевого користувача. Дійсно, багато традиційних постачальників CDN розвинули свої пропозиції від розміщення цих статичних частин до виконання «граничних функцій», які забезпечують певну форму обчислень.

Ідея полягає в тому, що незалежно від того, де в світі ви живете, ваш веб-сайт повинен завантажуватися швидко.

Це рекламують такі компанії, як Vercel, Fly.io, Cloudflare (воркери), Render, Supabase та багато інших. Якщо ви більше розробник інтерфейсу, це може мати великий сенс, якщо ваш код здебільшого статичний і ви покладаєтеся на зовнішні служби для таких речей, як стан.

Мушу зазначити, що тут є величезне застереження. Усе стає *набагато* складнішим, коли ви хочете керувати державою (читай: базами даних) у всьому світі. Сотні чи тисячі мілісекунд не є справою для сміху, вони становлять реальні проблеми навіть для компаній, чиє єдине існування присвячене розподіленим базам даних, як боляче зауважить будь-який допис у блозі Кайла. У якийсь момент ви боретеся з фізикою.

У будь-якому випадку, давайте уникати проблеми розподілених даних, тому що це не тема цієї статті. Замість цього, любий читачу, давайте покажемо, як ви можете відтворити цю «граничну» функціональність для своїх програм за допомогою unikernels, щоб користувач у Мумбаї, користувач у Сантьяго чи користувач у Сан-Франциско могли скористатися перевагами локальних затримок – у стилі локальної вечірки. < /p>

Примітка: якщо ви вперше граєте з unikernels, ви можете спочатку перевірити ops.city і запустити hello world на своєму ноутбуці, а потім запустити той самий hello world на інфраструктурі за вашим вибором (наприклад, як AWS або GCP), і він одразу відповість на багато ваших запитань. Оскільки це більш складна тема, почніть з неї. Я також маю зауважити, що це майже не займає часу: створення ops.city, unikenel go, на моєму ноутбуці та розгортання його на робочому місці займає менше 20 секунд.

Добре - назад? Готові до переваги?

Тепер є дуже технічні способи досягнення бажаної мети, але, дотримуючись нашої філософії робити найпростіші речі, які працюють, ми збираємося створити балансир навантаження. Unikernels справді сприймає хакерський дух KISS і уникає складності за рахунок простоти.

На щастя для нас, GCP може маршрутизувати до кількох регіонів одночасно, і ми можемо вибирати між HTTP(s) або TCP. Немає необхідності встановлювати щось на зразок Bird і керувати ним самостійно. Ви вже в хмарі, просто використовуйте те, що там є.

Ці балансувальники навантаження використовують холодну маршрутизацію, щоб обмежити кількість переходів (наприклад, перевести вас на найближчий сервер) і використовувати Anycast, що, по суті, дозволяє кільком серверам слухати одну IP-адресу. Тож насправді нам не потрібно джекувати – дякую, дядьку Г!

Отже, спочатку створимо балансир навантаження. Це забезпечує зовнішню IP-адресу, на яку ми можемо встановити запис DNS для таких речей, як розгортання без простоїв, а потім ми вказуємо туди дві групи екземплярів для серверної частини:

Тоді нам потрібно налаштувати дві групи екземплярів. Один у us-west2 і один у europe-west2. Вони мають бути в тому самому регіоні, де ви хочете запустити екземпляри. Для цього я використав некеровані групи екземплярів. Тепер я зробив це трохи раніше, коли вперше створив свої екземпляри, а потім помістив їх у групи екземплярів, але ви повинні знати, що операції вже мають наявну підтримку для розміщення ваших екземплярів у керованих і некерованих групах екземплярів, щоб масштабувати їх на вимогу залежно від навантаження . або рівень помилок, або будь-яку іншу метрику, яку ви виберете, і вона добре працює на AWS і GCP - k8 не потрібен. Я намагався уникати використання слова на літері в цій статті.

Наші групи екземплярів:

Тож давайте створимо зображення. Якщо ви бачили наші підручники раніше, це той самий маленький веб-сервер, який ми використовуємо, і оскільки давання імен є моєю сильною стороною, я просто назвав програму «region»:

основний пакет імпорт ( "fmt" "net/http" ) основна функція() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Ласкаво просимо на мій сайт!") }) fs := http.FileServer(http.Dir("static/")) http.Handle("/static/", http.StripPrefix("/static/", fs)) http.ListenAndServe(":8080...

Міжрегіональні одноядра на периферії

Схоже, що сьогодні кожна цікава компанія займається міжрегіональною геомаршрутизацією для програм. Багато хто з них називатиме це «край». Для таких людей, як я, перевага зазвичай означає щось інше, наприклад наявність справжніх пристроїв у морі, у повітрі, на вежі стільникового зв’язку, у Tesla тощо, але якщо ви зі світу CDN, це означає наявність кількох точок POP. (точка присутності) поширюється по всьому світу, де ви можете розміщувати зазвичай статичні сайти (наприклад, javascript, css тощо) ближче до кінцевого користувача. Дійсно, багато традиційних постачальників CDN розвинули свої пропозиції від розміщення цих статичних частин до виконання «граничних функцій», які забезпечують певну форму обчислень.

Ідея полягає в тому, що незалежно від того, де в світі ви живете, ваш веб-сайт повинен завантажуватися швидко.

Це рекламують такі компанії, як Vercel, Fly.io, Cloudflare (воркери), Render, Supabase та багато інших. Якщо ви більше розробник інтерфейсу, це може мати великий сенс, якщо ваш код здебільшого статичний і ви покладаєтеся на зовнішні служби для таких речей, як стан.

Мушу зазначити, що тут є величезне застереження. Усе стає *набагато* складнішим, коли ви хочете керувати державою (читай: базами даних) у всьому світі. Сотні чи тисячі мілісекунд не є справою для сміху, вони становлять реальні проблеми навіть для компаній, чиє єдине існування присвячене розподіленим базам даних, як боляче зауважить будь-який допис у блозі Кайла. У якийсь момент ви боретеся з фізикою.

У будь-якому випадку, давайте уникати проблеми розподілених даних, тому що це не тема цієї статті. Замість цього, любий читачу, давайте покажемо, як ви можете відтворити цю «граничну» функціональність для своїх програм за допомогою unikernels, щоб користувач у Мумбаї, користувач у Сантьяго чи користувач у Сан-Франциско могли скористатися перевагами локальних затримок – у стилі локальної вечірки. < /p>

Примітка: якщо ви вперше граєте з unikernels, ви можете спочатку перевірити ops.city і запустити hello world на своєму ноутбуці, а потім запустити той самий hello world на інфраструктурі за вашим вибором (наприклад, як AWS або GCP), і він одразу відповість на багато ваших запитань. Оскільки це більш складна тема, почніть з неї. Я також маю зауважити, що це майже не займає часу: створення ops.city, unikenel go, на моєму ноутбуці та розгортання його на робочому місці займає менше 20 секунд.

Добре - назад? Готові до переваги?

Тепер є дуже технічні способи досягнення бажаної мети, але, дотримуючись нашої філософії робити найпростіші речі, які працюють, ми збираємося створити балансир навантаження. Unikernels справді сприймає хакерський дух KISS і уникає складності за рахунок простоти.

На щастя для нас, GCP може маршрутизувати до кількох регіонів одночасно, і ми можемо вибирати між HTTP(s) або TCP. Немає необхідності встановлювати щось на зразок Bird і керувати ним самостійно. Ви вже в хмарі, просто використовуйте те, що там є.

Ці балансувальники навантаження використовують холодну маршрутизацію, щоб обмежити кількість переходів (наприклад, перевести вас на найближчий сервер) і використовувати Anycast, що, по суті, дозволяє кільком серверам слухати одну IP-адресу. Тож насправді нам не потрібно джекувати – дякую, дядьку Г!

Отже, спочатку створимо балансир навантаження. Це забезпечує зовнішню IP-адресу, на яку ми можемо встановити запис DNS для таких речей, як розгортання без простоїв, а потім ми вказуємо туди дві групи екземплярів для серверної частини:

Тоді нам потрібно налаштувати дві групи екземплярів. Один у us-west2 і один у europe-west2. Вони мають бути в тому самому регіоні, де ви хочете запустити екземпляри. Для цього я використав некеровані групи екземплярів. Тепер я зробив це трохи раніше, коли вперше створив свої екземпляри, а потім помістив їх у групи екземплярів, але ви повинні знати, що операції вже мають наявну підтримку для розміщення ваших екземплярів у керованих і некерованих групах екземплярів, щоб масштабувати їх на вимогу залежно від навантаження . або рівень помилок, або будь-яку іншу метрику, яку ви виберете, і вона добре працює на AWS і GCP - k8 не потрібен. Я намагався уникати використання слова на літері в цій статті.

Наші групи екземплярів:

Тож давайте створимо зображення. Якщо ви бачили наші підручники раніше, це той самий маленький веб-сервер, який ми використовуємо, і оскільки давання імен є моєю сильною стороною, я просто назвав програму «region»:

основний пакет імпорт ( "fmt" "net/http" ) основна функція() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Ласкаво просимо на мій сайт!") }) fs := http.FileServer(http.Dir("static/")) http.Handle("/static/", http.StripPrefix("/static/", fs)) http.ListenAndServe(":8080...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow