1. Tìm
nền
tảng
lập
trình
cho
5
năm
tới
cuong@techmaster.vn
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. 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. 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. 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. 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. Đ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. 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.
10. 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”.
11. 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.
12. 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
13. 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
14.
15. Bán
hàng
nhỏ
lẻ,
câu
kéo
khách
hàng
rất
mệt
và
không
hiểu
quả
20. 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è
21. 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
22.
23. 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
• ….
24. 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
27. Phalcon:
viết
lại
thư
viện
C
extension
cho
PHP
hdp://techmaster.vn/en/2014/02/tai-‐sao-‐chung-‐toi-‐chon-‐phalcon/
28. 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
29. blocking
I/O
sang
non-‐bloking
I/O
• Nginx
• Node.js
• Puma
server
• Nedy
• Akka
–
Spray
30. 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ề
31. 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)
34. 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
35. 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
37. Enterprise
Service
Bus
Architecture
Enterprise
Service
Bus
A
D
B
E
C
Producson
Management
Accounsng
System
CRM
+
Single
Sign
On
Inventory
38. 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
41. Đồ
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
42. Xử
lý
song
song
~
Parallel
Computing
Tỷ
lệ
mã
chạy
song
song
càng
tăng
tốc
độ
càng
nhanh
!
43. 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
45. 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
46. 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
47. 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ớ:
=>
:
::
:::
~
~>
!
`
:+
+:
48. 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ú
49. 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
50. Nếu
đam
mê
thực
sự
thì
tham
gia
đội
nhé!
hdp://techmaster.vn