Русский
Русский
English
Статистика
Реклама

Serverless шагает по планете. Сравним SberCloud и AWS

image


Мне с друзьями довелось поучаствовать в хакатоне
SberCloud.Advanced Hacking и пощупать облачные сервисы Сбера. На моем текущем месте работы я каждый день работаю с Serverless стеком от AWS (CloudFront + Lambda Edge + S3 + Lambda + Step Functions + Aurora PostgreSQL Serverless + DynamoDB + Cognito). Так что мне есть с чем сравнить. Если заинтересовались, то добро пожаловать под кат.


Недавно Сбер выкатил в публичный доступ свою облачную платформу SberCloud. К сожалению, сейчас, чтобы ей воспользоваться, нужно быть юридическим лицом. Представители Сбера говорят, что, возможно, доступ для физических лиц появится в следующем году. Но тем не менее, в рамках хакатона, я смог посмотреть, что там внутри, как обычный смертный. Что я там увидел? Огромное количество сервисов прям, как у AWS, на любой вкус https://sbercloud.ru/ru/products.


Меня прежде всего интересовал Serverless стек. Вообще, мало кто может похвастаться настоящими Serverless сервисами, у которых стоимость использования зависит только от реальной нагрузки. Сервером с платой за месяц уже ни кого не удивишь.


Я хотел собрать приложение аналогичное такому в AWS.
AWS Serverless Application


Вот что получилось на стеке SberCloud.
SberCloud Serverless Application


Я быстренько создал лямбду FunctionGraph.
FunctionGraph. 1
FunctionGraph. 2


Прикрутил к ней API Gateway. Настроил HTTP/HTTPS trigger.
API Gateway


Кстати, читать логи лямбды оказалось намного удобнее чем в AWS. Всё в одном месте. Ненужно прыгать по вкладкам и искать нужный Log Stream.
FunctionGraph Logs


К сожалению, настоящей Serverless базы данных у SberCloud не нашлось. Пришлось взять сервис с фиксированной платой.
RDS Postgres


Настроил Environment variables от PostgreSQL пользователя у лямбды FunctionGraph.
Environment variables


Написал небольшой Serverless адаптер для работы с PostgreSQL базой из лямбды. Нужно аккуратно закрывать за собой соединения, а то они кончатся.


import { Client } from 'pg'export const escapeId = (str: string): string => `"${String(str).replace(/(["])/gi, '$1$1')}"`export const escapeStr = (str: string): string => `'${String(str).replace(/(['])/gi, '$1$1')}'`export const executeStatement = async <T extends Record<string, any>>(  sql: string): Promise<Array<T>> => {  const client = new Client()  await client.connect()  try {    const res = await client.query(sql)    return res.rows  } finally {    await client.end()  }}

Настроил Object Storage Service.
Object Storage Service. 1
Object Storage Service. 2


Некое SDK для работы с SberCloud имеется, но чего-то полезного мне там найти не удалось.
SberCloud SDK


Для загрузки картинок из браузера в Object Storage Service через подписанный URL код пришлось писать самому. Не самое приятное занятие угадывать сигнатуры и считать хеши руками.


async (req: Request, res: Response) => {  validateUserHandler(req, res)  const { authToken } = context  const { userId } = req.params  const uploadId = uuidV4()  const body = Buffer.from(    JSON.stringify({      auth: {        identity: {          methods: ['token'],          token: {            id: authToken,            'duration-seconds': '900',          },        },      },    }),    'utf8'  )  const options = {    hostname: 'iam.ru-moscow-1.hc.sbercloud.ru',    port: 443,    path: '/v3.0/OS-CREDENTIAL/securitytokens',    method: 'POST',    headers: {      'Content-Type': 'application/json; charset=utf8',      'Content-Length': body.length,    },  }  const credentialBuffer: Buffer = await new Promise((resolve, reject) => {    const req = https.request(options, (res) => {      res.on('data', (data) => {        resolve(data)      })      res.on('error', (error) => {        reject(error)      })    })    req.write(body)    req.end()  })  const {    credential,  }: {    credential: { securitytoken: string; secret: string }  } = JSON.parse(credentialBuffer.toString('utf8'))  const { securitytoken, secret } = credential  const stringToSign = Buffer.from(    JSON.stringify({      expiration: '2020-12-31T12:00:00.000Z',      conditions: [        { 'x-obs-acl': 'public-read' },        { 'x-obs-security-token': securitytoken },        { bucket: 'anti-cube-images' },        ['starts-with', '$key', `${userId}/`],      ],    }),    'utf8'  ).toString('base64')  const hmac = crypto.createHmac('sha1', secret)  hmac.update(stringToSign)  const signature = hmac.digest('base64')  res.json({    uploadId,    signature,  })}

В целом SberCloud мне понравился. Очень достойно. Не ожидал увидеть международный уровень облачных сервисов на российском рынке. Желаю Сберу обзавестись настоящей Serverless базой данных с платой только за использование. Лучше смотреть в этом плане в сторону CosmosDB от Azure или опенсорсного TiDB на своих серверах. У AWS сделано не особо грамотно, не копируйте у них.


Дополнительно про SberCloud можно посмотреть на YouTube:



Документация: https://docs.sbercloud.ru/


На хакатоне мы с ребятами делали изоморфное приложение на React+Redux. Презентация нашего проекта: https://docs.google.com/presentation/d/1LNjg2xfFHljTuH6ke_lkF6o1m9HTfemWcxW0w1OOssc/edit?usp=sharing


Источник: habr.com
К списку статей
Опубликовано: 14.12.2020 10:07:17
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Javascript

Node.js

Amazon web services

Reactjs

Облачные сервисы

Sbercloud.advanced hacking

Aws

Serverless

React

Redux

Hackathon

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru