Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Microservices serverless jawsug

1,068 views

Published on

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

Published in: Technology
  • Be the first to comment

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)

×