O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Microservices serverless jawsug

1.334 visualizações

Publicada em

2018/01/20(Sat) jaws-ug大阪
https://jawsugosaka.doorkeeper.jp/events/67137

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Microservices serverless jawsug

  1. 1. 実践Microservice x Serverless Hiroki Konishi@MOTEX
  2. 2. こんにちは〜 —  Hiroki Konishi(@hiroki_k8) —  Developer —  Scala, DDD, AWS —  Jaws-ug Osaka staff @hiroki_k8 こにし ひろき hirokikonishi
  3. 3. はじめに —  ハッシュタグでいっぱい呟いてください!! —  #jawsug —  フィードバックください!!
  4. 4. AWSでMicroservicesやってる人?
  5. 5. AWSでServerlessやってる人?
  6. 6. システムが大きすぎるので、 分割したいと思っている人?
  7. 7. 今日お話しすること —  なぜマイクロサービスなのか —  AWSの各サービスの”くせ”のお話 —  やってみて、できていない所 —  便利ツールの紹介
  8. 8. なぜマイクロサービスなのか
  9. 9. なぜマイクロサービスなのか —  システムは複雑で巨大化していく —  リリースを素早く・無停止で実施したい
  10. 10. おすすめ書籍
  11. 11. マイクロサービス化するために —  サービス分割 —  データの分離 —  メッセージング —  トレーサビリティ —  レジリエンス —  無停止デプロイ —  テスト戦略 —  チーム体制
  12. 12. サービス分割 —  適切な大きさ/数に分割する => AWS Lambda, Amazon ECS, Amazon EC2 —  分割はドメイン単位 =>業務の関心事,コアな部分から育てていく(DDD) —  横断的関心事の分離 => プラットフォーム機能を拡充する
  13. 13. サービスの分割 —  関心事 —  顧客情報 —  商品情報 —  注文情報 —  在庫情報 顧客情報 名前 電話 番号 住所 商品情報 販売 業者 価格 品名 在庫情報 商品 番号 アド レス 個数 注文情報 数量 商品 ID 顧客 ID
  14. 14. おすすめ書籍
  15. 15. データの分離 —  データは各サービス毎に持つ Why: データ構造が変わると、サービス間で引きづられる ⇒ データ不整合の許容範囲(時間)を合意する ⇒ Amazon RDS, Amazon DynamoDB, Amazon S3 ⇒ メッセージングの仕組みを使う
  16. 16. 複数のサービスから一つのDBをみている
  17. 17. メッセージング —  サービス同士を連携させる仕組み ⇒ 非同期を許容する ⇒ Amazon Kinesis, Amazon SQS, Amazon SNS ⇒ Pub/Subにより表現する
  18. 18. トレーサビリティ —  サービス間のトレーサビリティの確保が重要 ⇒  リクエストやサービス間通信にIDを発行する ⇒  各サービスはログを吐く ⇒  ログから、アラーム/オートスケール ⇒  AWS CloudWatch, AWS X-Ray
  19. 19. レジリエンス —  障害が起きたら、自ら復旧する ⇒  1つのサービスの障害が全体に波及しない ⇒  可用性/柔軟性に繋がる ⇒  サーキットブレーカー: 障害の伝播を阻止する
  20. 20. 無停止デプロイ —  コードがサービスになるまでの一連を自動化 Why: 数多くのマイクロサービス全体を作るのは辛い =>ブルー/グリーンデプロイ, カナリアリリース => インテリジェントルーター: 自分の居場所は自分で登録する
  21. 21. テスト戦略 —  サービス内テスト =>モックなどを使ってユニットテスト —  サービス間テスト =>他サービスとの連携部分のテスト —  レジリエンステスト =>障害発見ではなく、障害が起こったらを何するを考える
  22. 22. 本題
  23. 23. AWSの各サービスの”くせ”
  24. 24. “くせ”ものエントリーリスト —  Amazon Kinesis —  AWS Lambda —  AWS Step Functions —  AWS X-Ray —  Amazon DynamoDB —  Amazon ElasticSearchService
  25. 25. エントリーNO1 Amazon Data Stream
  26. 26. マイクロサービスの間に どのサービス置いてます?
  27. 27. Kinesisとは 大規模なストリーミングデータをリアルタイムに処理する フルマネージド型のサービス。
  28. 28. SQSとは フルマネージド型のメッセージキューイングサービス
  29. 29. Stream vs SQS vs FIrehose :Sub リアルタイム 順序保証 金額 Stream 1:N(<3) 速 ○ 高 SQS 1:1 自前で構築 △(Option) 低 Firehose 遅 高
  30. 30. 1Kinesis複数Lambda
  31. 31. Kinesis x Lambda複数 —  getRecordの成功率が下がり、遅延につながる 1秒1以上でポーリング!!
  32. 32. エントリーNO2 AWS Lambda
  33. 33. Lambdaとは サーバーをプロビジョニングしたり管理せずに、 コードを実行できるコンピューティングサービス
  34. 34. AWS Lambda —  同時実行数 —  ライフサイクル —  VPC(ENI) —  タイムゾーン
  35. 35. エントリーNo3 StepFunctions
  36. 36. StepFunctionsとは 分散アプリケーションとマイクロサービスを簡単に調整できる
  37. 37. StepFunctions —  同時実行により、順序崩壊問題 —  ドキュメントに記載のないエラーのハンドリング
  38. 38. エントリーNo4 AWS X-Ray
  39. 39. X-Rayとは 分散アプリケーションなどの分析およびデバッグ
  40. 40. AWS X-Ray —  マイクロサービス間を繋いでトレースできない
  41. 41. エントリーNO5 Amazon DynamoDB
  42. 42. DynamoDBとは 整合性があり、10ms以下のレイテンシー。 高速かつフレキシブルなNoSQLデータベースサービス
  43. 43. Amazon DynamoDB —  バックアップどうする問題 —  スパイクに対するオートスケール間に合わない問題
  44. 44. エントリーNO6 Amazon ElasticSearchService
  45. 45. ElasticSearchとは フルマネージド型の検索エンジンサービス ログ分析や、フルテキスト検索などに向いている
  46. 46. Amazon ElasticSearchService —  Full GC後、数ms~数s間接続できない問題
  47. 47. MicroServices取り組んでみて、 できていない所
  48. 48. デプロイのパイプライン化 —  Jenkins —  Code Build x Code Deploy —  CircleCI
  49. 49. 無停止デプロイ —  10個くらい?マイクロサービス —  SPA(画面) —  クライアントアプリ
  50. 50. デプロイの疎結合化
  51. 51. サービス全体の監視 —  CloudWatch Logs —  ログ基盤 —  イベントID —  可視化
  52. 52. 便利ツールのご紹介
  53. 53. 便利ツールのご紹介 # sbtからLambdaとかAPI Gatewayとか作る (https://github.com/yoshiyoshifujii/sbt-aws-serverless) # PythonでCloudFormation Stackの管理 (https://github.com/crossroad0201/fabric-aws- cloudformation) # S3の中身全部クリーンしたい (https://github.com/hirokikonishi/deleteAllObjectsInS3)
  54. 54. 便利ツールのご紹介 # CloudWatchLogs全部消したい (https://github.com/hirokikonishi/ deleteAllLogGroupsInCloudWatch) # DynamoDBの差分バックアップしたい (https://github.com/hirokikonishi/dynamodb- continuous-backup)

×