Upload
techmaster-vietnam
View
3.516
Download
7
Embed Size (px)
DESCRIPTION
Scala, Play Framework
Citation preview
Tìm nền tảng lập trình cho 5 năm tới [email protected]
Tôi là
• Trịnh Minh Cường, học điện tử viễn thông K37 Bách Khoa HN
• Lắp mạch radio, bóng bán dẫn khi học lớp 7
• Lập trình từ năm 1993 …
• Thạc sỹ khoá cơ khí tại KAIST Hàn Quốc 2006
• Sáng lập TechMaster hdp://techmaster.vn
Techmaster Việt nam • Xây dựng phần mềm di động – cloud – web
• Khách hàng: 100% quốc tế
• Công ty đầu sên đào tạo lập trình viên iOS – Android – Windows Phone, PHP Phalcon, Ruby On Rails tại Hà nội (cũng có thể là Việt nam)
• Số lượng lập trình viên: 14 ~ 16 người (nhỏ xinh nhưng chuyên)
• Già nhất (1975) còn lại khoảng 1992-‐1986
Nội dung trình bày
Vấn đề thực sễn chúng tôi đang nghiên cứu, giải quyết
“Với nguồn kinh phí có hạn (thấp) làm sao xây dựng dịch vụ web – web service cho di động tốt cho càng nhiều người càng tốt”
Các tiêu chí để tìm • Miễn phí – mã nguồn mở
• Phải chạy được trên Linux, giảm tối đa chi phí bản quyền, phần cứng
• Mới, mạnh, hiệu quả, được công ty Mỹ -‐Nhật-‐ Âu dùng, nhưng không quá đại trà như ASP.net, PHP, Rails, Java để còn kiếm đất vượt lên
• Tốc độ -‐ Chịu Tải tốt trên cả phần cứng đại trà
• Đã được minh chứng qua các ví dụ thành công thực tế
80% đề tài tốt nghiệp của sinh viên • Ứng dụng web quản lý sinh viên
• Web site bán hàng trực tuyến
• Web site xem phim trực tuyến
• Ứng dụng quản lý quan hệ khách hàng
• Ứng dụng quản lý kho bãi
• Ứng dụng đề thi thực tuyến
• ….
Điểm chung là gì?
• Mô hình client – server • Desktop client nối vào database server (đã rất cổ) • Desktop client nối vào web service. Web service gọi
vào database • Dynamic web nối vào database server
• Cơ sở dữ liệu quan hệ • Microso� SQL Server, Oracle, MySQL, Postgresql • Có nhiều bảng chung như: user…
Nhiều năm rồi vẫn thế
• Các đề tài tốt nghiệp khoa CNTT ở VN thường dừng ở mức: phân �ch – thiết kế (UML) -‐ lập trình chức năng – CRUD
• Chèn thật nhiều code cho dày luận văn tốt nghiệp.
• Tốt nghiệp xong -‐> xin việc -‐> đào tạo lại
Vừa mua xong một luận văn ngành quản trị kinh doanh, Nguyễn Văn N. sinh viên Đại học Kinh tế Quốc dân phấn khởi chia sẻ: “Luận văn tốt nghiệp gần trăm trang mà giá chỉ 30 nghìn đồng, không bằng cả Zền công đánh máy. Em phải chọn đề tài của anh chị sinh viên cách đây mấy khóa để khi chấm các thầy cũng không thể nhận ra”.
3 năm gần đâycó thêm lập trình di động
• iOS, Android, Windows Phone, hybrid app: bản chất vẫn là client app cài đặt trên thiết bị
• Ứng dụng di động không kết nối trực sếp vào database server mà phải kết nối vào web service: • Phương thức REST trả về JSON/XML • Phương thức SOAP trả về XML
• Techmaster chỉ dạy trong khoảng 5 tháng là code được ứng dụng di động để đi xin việc.
Thực tế phức tạp hơn nhiều • Với kinh phí đầu tư phần cứng có hạn, làm sao cung cấp dịch vụ
cho nhiều người hơn?
• Ứng dụng hỗ trợ đa nền tảng (Web – Desktop – Di động)
• Dịch vụ dễ dàng bảo trì, nâng cấp, điều chỉnh cho từng khách hàng
• Rẻ và rẻ hơn nữa, thậm chí cho không để thu sền bằng cách khác
• Trải nghiệm tốt hơn, mới hơn. Khác biệt với đối thủ-‐> khách hàng sướng
Web site techmaster.vn • 2011-‐2012: share host ở **C: 200,000 VND /tháng. Truy cập
100 ~200 visit/day. 1 tháng phải gọi hỗ trợ kỹ thuật 1 lần vì site lăn ra chết
• 2012 – 2013: VPS host ở Linode, data center tại Nhật, 20 USD /tháng. Truy cập: 200 ~ 300 visit/day. Quảng cáo rất tốt, nhưng I/O đọc ghi ổ cứng rất kém
• 2013 – 2014: VPS host ở Digital Ocean, data center tại Sanfransico, 10 USD /tháng. Truy cập: 500-‐800 visit /day. Host được 2-‐3 WordPress site đồng thời. Hiệu quả tốc độ lẫn đầu tư. Chạy ổn định
Bán hàng nhỏ lẻ, câu kéo khách hàng rất mệt và không hiểu quả
Lượng truy cập tăng ~ doanh số
Tăng 50 page view / ngày
Có thêm 1 khách hàng
tái đầu tư công
nghệ, bài giảng
Page view tăng
Khách hàng tăng
Họ giới thiệu cho bạn bè
Hãy tìm giải pháp • Web site bán vé tàu từ Nam ra Bắc quá tải lúc giáp Tết. Có thể
có gần 800,000 người cần mua vé trong khoảng 2 tuần.
• Web site đăng ký �n chỉ quá tải đầu học kỳ. Số lượng sinh viên truy cập đồng thời > 600
• Ứng dụng di động nổi sếng như Foursquare, FlipBoard, Paper, Whatsapp, Viber có thể hàng triệu người dùng đồng thời, trên nhiều quốc gia khác nhau?
Web site dịch vụ trực tuyến có hàng nghìn truy cập đồng thời từ cả web và di động. Chi phí hosEng chỉ khoảng 50 ~ 70 USD/tháng
Số lượng truy cập, dữ liệu tải => thay đổi kiến trúc, công nghệ
• < 50 users: client – server cổ điển
• > 50 users: 80% read – 20% write: bổ xung disk cache – mem cache
• > 100 users đến x1000 users. • Giảm tối đa page reload => AJAX • CDN host stasc files • Cache – cache-‐ cache • Phân tải (load balance) – Phân tán (distributed) • Kết hợp RDBMS với NoSQL • HDD -‐> SDD -‐> Fast Memory • ….
Chẩn đoán bệnh à kê đơn • Tối ưu ở Front End (CSS, JavaScript) • Combine CSS, JavaScript.
• Tối ưu phần cứng + băng thông => tốn Zền
• Tối ưu cách viết mã (CSS, JavaScript, HTML, web programming) => mất nhiều công đọc lại code
• Tối ưu kiến trúc – nền tảng, thư viện của ứng dụng => phải chọn ngay từ đầu, đầu tư dài hạn • Web Server • Web Framework • Web Programming Language
Web server
Phalcon: viết lại thư viện C extension cho PHP
hdp://techmaster.vn/en/2014/02/tai-‐sao-‐chung-‐toi-‐chon-‐phalcon/
HHVM: Just In Time compiler để dịch mã PHP thành byte code
Phalcon: lập trình bắt buộc phải viết ứng dụng sử dụng thư viện Phalcon HHVM tối ưu tốc độ cho những web site sử dụng các thư viện khác nhau. Không tương thích 100% với nhiều web site.
HHVM tăng đáp ứng resquests per second. Đồ thị ở trang hdp://blog.liip.ch/archive/2013/10/29/hhvm-‐and-‐symfony2.html
blocking I/O sang non-‐bloking I/O • Nginx • Node.js • Puma server • Nedy • Akka – Spray
Server Sent Event vs Polling
Polling: client đều đặn – liên tục gửi yêu cầu lấy dữ liệu mới nhất từ server à khiến máy chủ quá tải Server Sent Event: client đăng ký nhận thông báo từ server. Có thay đổi thì báo về
Tham khảo Server Sent Event • hdp://developereventlog.blogspot.com/2013/06/aspnet-‐
signalr-‐real-‐sme-‐applicason_6.html
• hdp://www.jayway.com/2012/05/11/html5-‐server-‐sent-‐events
• Các server hỗ trợ • IIS – Signal R • Ruby On Rails 4 (dễ dùng, chạy không nhanh) • Node.js – Server Sent package (dễ dùng, chạy nhanh) • Play Framework (khó học, chạy nhanh)
Phân tải ~ Load Balancing
Một khối-‐ Monolithic
Kho dữ liệu chung
Máy chủ khoẻ
Web site A
Web site B
Web site C
Hay
ì Xây dựng nhanh
ì Dùng ít công nghệ vẫn làm được
ì Cơ sở dữ liệu tập trung, nên tạo báo cáo, �ch hợp dữ liệu dễ dàng
Dở
ì Khó mở rộng – bảo trị
ì Khó bổ xung thêm nhiều server à Dễ bị quá tải
ì Lỗi một nơi, sập cả hệ thống -‐Single point of failure
Kiến trúc một khối
Kiến trúc phân tán
Hay
ì Giảm “single point of failure”
ì Giảm tải, chuyên biệt hoá
ì Mở rộng tốt hơn (scale)
ì Dễ nâng cấp, bảo trì từng khối con
Dở
ì Kết nối giữa các khối con có thể phức tạp
ì Nếu tác vụ ghi ở nhiều khối khác nhau à rất khó đồng bộ dữ liệu
ì Không dùng blocking call để gọi giữa các khối con à ngáng chân nhau
Hệ thống phân tán thiết kế lộn xộn
Enterprise Service Bus Architecture
Enterprise Service Bus
A
D
B
E
C
Producson Management
Accounsng System
CRM + Single Sign On Inventory
Messaging between applications
• Rabbit MQ hỗ trợ các ngôn ngữ lập trình khác nhau. Rabbit MQ viết bằng Erlang chạy rất nhanh. Nhưng khi giao sếp với khối xử lý chậm, nó sẽ bị suy giảm tốc độ
• Akka – Actor viết bằng Scala biên dịch chạy trên JVM. Chạy rất nhanh, tốn ít bộ nhớ Sẽ nói ở phần sau
Đi tìm một nền tảng lập trình cho 5 năm tới
hdp://spray.io/zse/#/6
Đồ thị trước cho thấy • Số lượng transistor trên một lõi (core) vẫn sếp tục tăng
• Năng lực �nh toán của single thread đã tới hạn
• Tốc độ xung nhịp của CPU cũng tới hạn
• CPU không nên sêu thụ thêm năng lượng mà thậm chí phải giảm (thời kỳ di động rồi !)
• Số lõi (core) sếp tục tăng
Xử lý song song ~ Parallel Computing
Tỷ lệ mã chạy song song càng tăng tốc độ càng nhanh !
Chọn Scala • Ngôn ngữ Scala ra đời 2003. Biên dịch chạy trên Java Virtual
Machine
• Phát triển nhanh, nhiều �nh năng hơn Java. Java 8 mới có funcsonal programming.
• Code viết ngắn gọn hơn Java
• Kết hợp OOP + Funcsonal Programming
• Sử dụng chung các thư viện có sẵn của Java
• Chạy từng dòng lệnh hoặc viết mã rồi biên dịch
• API xử lý collecson, chuỗi… rất phong phú
• Hỗ trợ sẵn đa nhiệm, Async: Future -‐ Promise
Scala nói ít làm nhiều
class Barista extends Actor { ! def receive = { ! case CappuccinoRequest => ! sender ! Bill(250) ! case EspressoRequest => ! sender ! Bill(200) ! case ClosingTime => context.system.shutdown() ! } !} !
Các đối tượng Scala trong cùng 1 process hoặc từ xa có thể truyền sn cho nhau kiểu di
bộ (asynchronously) hết sức đơn giản
Play Framework • Linked In, Coursera, Gilt, The Guardian, Lucid Chart, MiaVia,
Walmart Canada… dùng
• Biên dịch bytecode chạy trên JVM nhưng lại Hot Reload giống như PHP
• Tích hợp với Akka, Actor để chạy song song trên nhiều CPU, máy chủ khác nhau
• Non-‐Blocking I/O: Nedy. Bản 3.0 chuyển sang Spray.IO
• Server Sent Event – WebSocket
• Mô hình MVC
• Kết nối CSDL qua Slick: Funcsonal Relasonal Mapper vs ORM
Kinh nghiệm sau 5 tháng làm việc • Ngôn ngữ Scala khó học. LTV cần cởi mở tư duy khi lập trình
Funcsonal. Mất khoảng 3 tháng để thực sự hiểu trong khi PHP chỉ mất khoảng 2 tuần.
• Nhiều ký tự lạ cần phải nhớ: => : :: ::: ~ ~> ! ` :+ +:
Kết quả • Khi đã quen thì nền tảng Play Framework, Akka, Spray, Slick
cùng Scala sẽ giúp xây dựng web site, dịch vụ web service đáp ứng sêu chí khắt khe: scalable – resilient – event-‐driven. Tham khảo hgp://www.reacZvemanifesto.org
• Một site cho khách hàng Mỹ
• Một site dịch vụ trực tuyến dự kiến
• Tuyển thêm nhiều sinh viên thực tập để dạy lập trình Scala, Play Framework. Các bạn sinh viên học rất nhanh và hứng thú
Mong muốn • Trường Đại học Quốc Gia Hà nội mạnh dạn đưa công nghệ mới
vào đào tạo
• Đặc biệt kỹ năng lập trình Scala, Funcsonal Programming, Akka – Actor, Spray, Slick…
• Giới thiệu học viên đam mê công nghệ đến thực tập tại Techmaster -‐> làm tốt, tuyển dụng lại
• Hướng dẫn sinh viên xây dựng những ứng dụng mobile-‐web kiến trúc mới, �nh đến tốc độ, tải, khả năng phân tán
Nếu đam mê thực sự thì tham gia đội nhé! hdp://techmaster.vn