Tìm nền tảng lập trình cho 5 năm tới

4,968 views
4,780 views

Published on

Scala, Play Framework

Published in: Technology

Tìm nền tảng lập trình cho 5 năm tới

  1. 1. Tìm  nền  tảng  lập  trình  cho  5  năm  tới   cuong@techmaster.vn  
  2. 2. 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  
  3. 3. 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  
  4. 4. 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”  
  5. 5. 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ế  
  6. 6. 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   •  ….  
  7. 7. Đ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…  
  8. 8. 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    
  9. 9. 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”.    
  10. 10. 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.  
  11. 11. 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  
  12. 12. 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  
  13. 13. Bán  hàng  nhỏ  lẻ,   câu  kéo  khách   hàng  rất  mệt  và   không  hiểu  quả  
  14. 14. Lượng  truy  cập  tăng  ~  doanh  số  
  15. 15. 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è  
  16. 16. 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  
  17. 17. 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   •  ….  
  18. 18. 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  
  19. 19. Web  server  
  20. 20. Phalcon:  viết  lại  thư  viện  C  extension  cho  PHP   hdp://techmaster.vn/en/2014/02/tai-­‐sao-­‐chung-­‐toi-­‐chon-­‐phalcon/  
  21. 21. 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    
  22. 22. blocking  I/O  sang  non-­‐bloking  I/O   •  Nginx   •  Node.js   •  Puma  server   •  Nedy   •  Akka  –  Spray  
  23. 23. 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ề  
  24. 24. 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)  
  25. 25. Phân  tải  ~  Load  Balancing  
  26. 26. Một  khối-­‐  Monolithic   Kho  dữ  liệu   chung   Máy  chủ   khoẻ   Web  site  A   Web  site  B   Web  site  C  
  27. 27. 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  
  28. 28. 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  
  29. 29. Hệ  thống  phân  tán  thiết  kế  lộn  xộn  
  30. 30. Enterprise  Service  Bus  Architecture   Enterprise  Service  Bus   A   D   B   E   C   Producson   Management   Accounsng   System   CRM  +  Single   Sign  On   Inventory  
  31. 31. 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    
  32. 32. Đi  tìm  một  nền  tảng  lập  trình  cho  5   năm  tới  
  33. 33. hdp://spray.io/zse/#/6  
  34. 34. Đồ  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  
  35. 35. Xử  lý  song  song  ~  Parallel  Computing   Tỷ  lệ  mã  chạy  song   song  càng  tăng  tốc   độ  càng  nhanh  !  
  36. 36. 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  
  37. 37. Scala  nói  ít  làm  nhiều  
  38. 38. 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  
  39. 39. 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  
  40. 40. 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ớ:  =>  :  ::  :::  ~  ~>  !  `  :+  +:    
  41. 41. 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ú  
  42. 42. 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  
  43. 43. Nếu  đam  mê  thực  sự  thì  tham  gia  đội  nhé!  hdp://techmaster.vn    

×