50
Tìm nền tảng lập trình cho 5 năm tới [email protected]

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

Embed Size (px)

DESCRIPTION

Scala, Play Framework

Citation preview

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

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

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

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  

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

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  

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

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”  

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

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ế  

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

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  

•  ….  

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

Đ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…  

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

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    

Page 9: Tìm nền tảng lập trình cho 5 năm tới
Page 10: Tìm nền tảng lập trình cho 5 năm tớ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”.    

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

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.  

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

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  

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

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  

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

Bán  hàng  nhỏ  lẻ,  câu  kéo  khách  hàng  rất  mệt  và  không  hiểu  quả  

Page 16: Tìm nền tảng lập trình cho 5 năm tới
Page 17: Tìm nền tảng lập trình cho 5 năm tới
Page 18: Tìm nền tảng lập trình cho 5 năm tới
Page 19: Tìm nền tảng lập trình cho 5 năm tới

Lượng  truy  cập  tăng  ~  doanh  số  

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

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è  

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

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  

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

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  •  ….  

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

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  

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

Web  server  

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

Phalcon:  viết  lại  thư  viện  C  extension  cho  PHP  

hdp://techmaster.vn/en/2014/02/tai-­‐sao-­‐chung-­‐toi-­‐chon-­‐phalcon/  

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

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    

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

blocking  I/O  sang  non-­‐bloking  I/O  •  Nginx  •  Node.js  •  Puma  server  •  Nedy  •  Akka  –  Spray  

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

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ề  

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

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)  

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

Phân  tải  ~  Load  Balancing  

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

Một  khối-­‐  Monolithic  

Kho  dữ  liệu  chung  

Máy  chủ  khoẻ  

Web  site  A  

Web  site  B  

Web  site  C  

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

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  

Page 35: Tìm nền tảng lập trình cho 5 năm tớ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  

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

Hệ  thống  phân  tán  thiết  kế  lộn  xộn  

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

Enterprise  Service  Bus  Architecture  

Enterprise  Service  Bus  

A  

D  

B  

E  

C  

Producson  Management  

Accounsng  System  

CRM  +  Single  Sign  On   Inventory  

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

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    

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

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

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

hdp://spray.io/zse/#/6  

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

Đồ  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  

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

Xử  lý  song  song  ~  Parallel  Computing  

Tỷ  lệ  mã  chạy  song  song  càng  tăng  tốc  độ  càng  nhanh  !  

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

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  

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

Scala  nói  ít  làm  nhiều  

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

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  

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

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  

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

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ớ:  =>  :  ::  :::  ~  ~>  !  `  :+  +:  

 

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

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ú  

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

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  

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

Nếu  đam  mê  thực  sự  thì  tham  gia  đội  nhé!  hdp://techmaster.vn