Tiếp bài trước
Nếu ai là fan của Samsung thì sẽ biết đến hệ sinh thái Samsung SmartThings , nền tảng iOT. Hệ sinh thái này cho phép user có thể kết nối mọi thiết bị của Samsung như smartphone, tivi, tủ lạnh, máy giặt từ bất cứ đâu. Ví dụ như ngồi ở công ty có thể dùng smartphone để bật điều hòa, tivi, check camera xem vợ đang làm gì
]
Nói đến Bigdata thì Apache Spark framework được sử dụng để xử lý dữ liệu thời gian thực, build on top của Hadoop cluster. Spark App pull data từ các thiết bị sensor, device từ Device Gateway và Kafka để thực hiện ETL, rồi lưu kết quả và Hbase, các thiết bị như mobile app sẽ query data qua API gateway để hiện thị trên điện thoại của user
Nếu nhìn như mô hình trên thì Samsung dùng giải pháp self-hosted tức là tự deploy Kafka, Spark lên EC2 instance truyền thống (nằm trong các ASG)
Ví dụ như Kafka, như mô tả ở bài trước , thì Kafka cluster bao gồm nhiều broker instance manage bởi Zookeeper, thông tin này lưu trong zookeeper.properties
clientPort=2181server.1=172.31.11.221:2888:3888server.2=172.31.7.161:2888:3888server.3=172.31.2.85:2888:3888
Mấy thông tin như server.1, 2 là các kafka broker, được assign IP, các broker này expose qua ELB. Mỗi khi broker instance được thêm bớt, thì file config trên được update. Nhìn chung thì script làm được việc này.
Các Spark App cũng được deploy trên EC2 theo cách tương tự như vậy
Lúc đầu architect này chạy ổn. Tuy nhiên vào mùa sale, số lượng user Smart Things tăng lên đột ngột thì hệ thống này xuất hiện issue.
Vì cách deploy theo kiểu self-hosted này, đồng nghĩa với việc các kĩ sư Samsung phải tự manage bằng cơm, resvered resources khi lượng request tăng lên đột ngột.
-Xms4g -Xmx4g
#executor_per_node = (vcore_per_node-1)/spark.executor.coresexecutor_per_node = (16–1)/5 = 3#spark.executor.instances = (executor_per_node * number_of_nodes)-1spark.executor.instances = (3*3)-1 = 8
Kỹ sư của Samsung SmartCloud cần phải tìm ra giải pháp khác đảm bảo khả năng scalability và availability/maintainability cho hệ thống, tránh cách self-hosted solution như trên
Cuối cùng, giải pháp được lựa chọn là chuyển mô hình EC2 truyền thống sang serverless/full managed dùng EKS, Apache Flink on Kinesis Data analytic
Apache Flink có nhiều ưu điểm hơn so với Spark
Kiến trúc mới được đề xuất như sau
Đổi Kafka Self-hosted trên EC2 thành Managed Kafka của AWS, incoming traffict được đưa vào Kafka trước khi consume bởi Kinesis
50+ Spark App migrate sang 30+ Flink Apps trên Kinesis Data Analytics
Microservice được container và deploy trên EKS thay vì EC2 để leverage khả năng scale của k8s
Tuy nhiên việc migrate từ hệ thống cũ sáng mới có nhiều challeging. Một trong số đó là khả năng AutoScale của Kinesis
Apache Flink có thông số gọi là Parallel Execution, đại loại là số instance task được chạy parallelism quá trình scale out/in là tăng giảm con số này từ 1 đến 256 (max)
Theo documentation of AWS, Kinesis mất 15 phút để thực hiện scale out khi CPU usage vượt 75%, trong khi , trong khi scales down khi CPU < 10% mất tới 6 giờ. Như vậy là thời gian scale in quá nhanh còn scale out thì quá chậm dẫn tới tốn chi phí
Vì vậy Samsung tự build custom autoscaling thay vì dùng đồ có sẵn của AWS
Theo giải pháp này thì CloudWatch track CPU usage rồi trigger Lambda để thực hiện thay đổ parallelism values, dễ dàng customize và tốc độ scaling nhanh hơn so với build in của AWS
Sau khi thực hiện đo đạc metrics, kiến trúc mới hiệu quả hơn so với kiến trúc cũ
0 Nhận xét