SlideShare una empresa de Scribd logo
1 de 97
Xây dựng web framework
+ CMS trên Node.js
Trịnh Minh Cường,
http://techmaster.vn
Toong, Hanoi 2015/11/27
agenda = {
intro: 'Why JavaScript, Node.js?',
arrowjs:
[
'Dễ cài', 'Code nhanh', 'CMS',
'Chạy tít', 'Microservices'
],
roadmap:
[
'Designer friendly',
'Dev friendly',
'User friendly'
],
more: 'Tham khảo thêm'};
Tại sao JavaScript và
Node.js?
Lập trình frond end & back
end : 1 ngôn ngữ duy nhất
StackOverflow
2015 Survey
JavaScript: 1
Số repo trên Git
tăng mạnh
• WordPress > Calypso viết bằng 100% Node.js, React
• IBM mua StrongLoop, chuyên Node.js
• MicrosoftVisual Studio hỗ trợ Node.js
• Dùng Node.js
– Mobile.de
– Walmart Canada
– Linked In
– Task Rabbit
Visual Studio fully supports Node.js development
JavaScript không chỉ có jQuery !
• Bi directional data binding
– Meteor
– Angular, Ember, Knockout
– React, JSBlocks
• Real time notification
– WebSocket
– Server Sent Event
Sản phẩm cần nhiều công nghệ
• Tăng đội phát triển. Tuyển người giỏi rất khó
• Tăng thời gian, công sức kiểm thử
• Chậm lại tiến độ ra sản phẩm
Speed Is the Ultimate Startup Weapon
Mike Cassidy
• Dễ dùng, Dễ cài đặt
• Dễ sửa đổi, lập trình mở rộng
• Dễ kiếm theme, tạo theme
• Tốc độ cao /Tốn ít tài nguyên
• Không phí bản quyền
• Cộng đồng lớn, nhiều thư viện có sẵn
• Dễ scale out hoặc > microservice
MVC Frameworks
• Rails
• ASP.net MVC
• Django
• Laravel, Phalcon,
CodeIgnitor, CakePHP
• Sails, Mean.io
CMS
• WordPress
• Joomla
• Drupal
• Magento
• ….
framework do người Việt tham gia
• NukeViet – PHP nhiều
pluginshttps://github.com/nukeviet/nukeviet/
• XiTrum - Scala của ĐàoThanh Ngọc
https://github.com/xitrum-framework/xitrum
• Litpi – PHP củaVõ DuyTuấn
http://litpiframework.com/
• Lotus – Ruby :Trung Lê và nhiều dev ởViệt nam
http://lotusrb.org/
Framework chỉ sống khi
cả developer và theme designer
đều dùng
Fast Reactive
Arrowjs.io
Themes Microservice
github.com/arrowjs/ArrowjsCore
arrowjs.github.io/ArrowjsCore
github.com/arrowjs/CMS
github.com/arrowjs/examples
github.com/arrowjs/Documents
Arrowjs.io
1.Dễ cài
2.Code nhanh
3.CMS
4.Chạy tít
5.Microservices
1.Dễ cài
2. Code nhanh
3. CMS
4.Tốc độ - chịu tải
5. Microservices
Install by bash
bash <(curl –s
http://arrowjs.io/install.
sh)Cài đặt Node.js, Postgresql, Redis tự động clone CMS mới nhất. Đã kiểm thử trên
CentOS 6, 7, Debian 8, Ubuntu 15.04, Fedora…
Install by Node.js npm
npm install arrowjs
Install by Docker
sudo docker pull arrowjs
• Nâng cấp Node.js 4.x
$wget http://node-arm.herokuapp.com/node_latest_armhf.deb
$sudo dpkg -i node_latest_armhf.deb
• Cài đặt Postgresql 9.4, Redis
• Cài đặt CMS
$git clone https://github.com/arrowjs/CMS.git
cd cms
npm install
npm start
1. Dễ cài
2.Code nhanh
3. CMS
4.Tốc độ - chịu tải
5. Microservices
Tạo web app
yo arrowjs
Tạo feature
yo arrowjs:feature "name"
Demo
• Tạo ứng dụng
• Tạo feature
• Tạo model
• Kết nối cơ sở dữ liệu
• Thử REST
Theme – View Template
{% extends "base.html" %}
{% block header %}
<h1>{{ title }}</h1>
{% endblock %}
{% block content %}
<ul>
{% for name, item in items %}
<li>{{ name }}: {{ item }}</li>
{% endfor %}
</ul>
{% endblock %}
Arrowjs dùng Nunjucks template
• Kế thừa ~ extend
• Tái sử dụng ~ marco, include, block
• Logic ~ if, for, range, cycler
• Xử lý async
• Compile sẵn để tăng tốc
Sequelize ORM
• Postgresql, MySQL, MariaDB, SQLite, MSSQL
• Model definition, relations
• Hook: cài đặt sự kiện trước, sau lệnh SQL
– Instance Hook, Model Hook
• Raw Query: khi ORM bất lực
• ManagedTransaction
• Migration: chỉnh sửa, nâng cấp db schema
1. Dễ cài
2. Code nhanh
3.CMS
4.Tốc độ, chịu tải
5. Microservices
Arrowjs.io
Demo
• Chức năng tạo post
• Quản lý user
• Phân quyền theo role
• Chuyển đổi theme
1. Dễ cài
2. Code nhanh
3. CMS
4.Tốc độ, chịu tải
5. Microservices
So sánh với Mean.js, Sail.js
• Cả 3 cùng sử dụng Express
• Arrowjs: Promise BlueBird thay callback cổ điển
• Phần core đơn giản, tối thiểu
• Đội benchmark độc lập (sv Bách Khoa) sử dụng
Gatling.io
• Mean.js không bỏ morgan, cònArrowjs và Sailjs nên sẽ chậm hơn một chút
0
100
200
300
400
500
600
700
800
Mean req/s Min Max Mean Std Deviation
ArrowJS MeanJS SailsJS
HelloWorld, 1000 concurrent
users, no cache
CPU: 1 Core
RAM: 2G
Debian 8.x, Node 4.2.2
0
200
400
600
800
1000
1200
1400
1600
1800
Mean req/s Min Max Mean Std Deviation
ArrowJS MeanJS SailsJS
Render View, 1000
concurrent users, no cache
CPU: 1 Core
RAM: 2G
Debian 8.x, Node 4.2.2
Duy nhất 01 Node.js process
Tận dụng nhiều Node.js process
Monolithic sang Microservice
Triết lý module hóa Node.js
phù hợp với Microservice
Feature =
Model +
Controller +
View (Theme) +
Routes
Cần mở rộng đến đâu,
tách feature đến đó !
Demo
• Kết nối ActionHero
• Xử lý long run task
– Không để long run task chiếm CPU time của ứng
dụng Node.js
– Chuyển nó qua service khác.
https://github.com/arrowjs/examples/tree/master/ZeromqSocketio
Để Arrowjs tiếp tục
phát triển và hữu ích?
• Ví dụ hữu ích, dùng trong nhiều trường hợp
• Document +Tutorial
http://arrowjs.github.io/ArrowjsCore/
• Bổ xungTest tự động
• Hỗ trợ các start up ứng dụng Arrowjs
• Mở khóa học trực tuyến đào tạo Arrowjs
Chúng tôi sẽ làm gì
• Hợp tác design studio nâng cao UX với
theme designer
• Hướng dẫn chuyển theme miễn phí
Hợp tác với theme design house
Arrowjs.io
Lộ trình phát triển
• BDD UnitTest 100%
• Cấu hình cài đặt web site dễ nhưWordPress
• Tool tự động convertWordPress theme sang Arrowjs
• Tạo MVC app hiệu suất như Rails
• Ví dụ, pattern để scale out, chuyển sang Microservice
tiện lợi, hiệu quả
Tham khảo thêm
Công cụ hay
• Browserify: giúp browser dùng được Node.js modules
• Grunt, Gulp: thực thi task xử lý hậu kỳ: uncss, minify,
uglify
• Mocha, Chai, Jasmine: kiểm thử tự động
• Yo: tự động gen code theo mẫu
• PM2: quản lý nhiều Node.js process, load balance, tự
khởi động lại
Thư viện tốt
• Lodash: tập các hàm xử lý tập, đối tượng. Dễ hơn Scala
• Sequelize: ORM cho Postgresql, MySQL, SQLite…
• Passport: authentication nhiều kiểu đăng nhập
• Nunjucks: template engine
• Winston: log to file, database, cloud…
Chuyên cho Microservice
• Restify: chuyên tạo REST web service
• ActionHero: scalableAPI server
• Seneca: microservice toolkit
• Kafka Node: Kafka client
• ZMQ: ZeroMQ client
Dịch vụ cloud trả phí > giảm công sức code
• Keymetrics: báo thông số, lỗi hệ thống
• Graylog: thu thập thông tin, log
Node.js chống chỉ định > cách xử lý
• Tác vụ tốn CPU time, cần multi-thread > Message
queue gọi task runner viết bằng C++, Java, .NET, Go
• Đóng mã nguồn > UglifyJS, Obfuscator, JSScrambler,
Node.js vs Playframework
http://www.slideshare.net/brikis98/nodejs-vs-play-framework
JavaScript Scala
Object Oriented Programming 3 10
Easy to learn 8 4
Strong Type 1 10
Community 10 2
Reusable libraries 10 4
Code speed 8 6
Friendly to frond end 10 0
Friendly to back end 3 8
BDD, TDD 9 4
Performance 3 7
65 55
Arrowjs.io
Arrowjs.io
Golang bù đắp điểm yếu của JavaScript
• Tốc độ thực thi x 1.2 Java
• Cần ít bộ nhớ hơn Java
• Co-routines – Multithread
• Biên dịch ra mã nhị phân
• Tương đồng với JS: REPL, weak
OOP, cú pháp đơn giản
Con đường đi đến Node.js và Arrowjs.io
10/2011 Techmaster.vn Drupal 6.x
Mua theme sẵn, khó chỉnh sửa
04/2012 Techmaster.vn > WordPress 3.x
Theme responsive, free. Có nhiều plugin rất thích
08/2013 Dự án gia công trên PHP Kohana. Không ấn tượng lắm
12/2013 PHP Phalcon 1.x cho các dự án Úc
04/2014 Thử nghiệm Rails, Play. Scala có vẻ cool, cú pháp expressive
Chọn Play Framework, Scala cho dự án hocngay.com
08/2014
Scala khó học, tốc độ Play Framework không thực
sự nổi trội, tốn nhiều RAM khi cập nhật code mới
Sau 2 dự án PlayFramework, quyết định dừng
09/2014 Sử dụng Phalcon để xây dựng lại toàn bộ ứng dụng
10/2014 Chuyển xong. Phalcon PHP lập trình hiệu suất cao
Nhưng PHP không hỗ trợ Real Time Notification
11/2014 Tạm dừng dự án đào tạo trực tuyến do Dev phải gia công
kiếm tiền trước
12/2014 Dùng WordPress + WPLMS plugin làm site đào tạo trực tuyến
Chạy rất chậm, hệ thống cực phức tạp, nếu sửa thì không thể
cập nhật bản mới. WordPress suck !
01/2015 Sử dụng Node.js tạo web service và real time notification
cho ứng dụng mobile.
Thử nghiệm Mean.js. Loại Mean.js do nó gắn chặt
MongoDB và Angularjs
04/2015 Xây dựng framework MVC nội bộ sử dụng Postgresql,
Sequelize lấy tên là Arrowjs.io
05/2015 Benchmark Arrowjs vs WordPress đã cache. Arrowjs tốc độ vượt
hơn
10/2015
Hệ thống đào tạo trực tuyến 1.0 xong
Có 700 học viên đăng ký
11/2015 Mở mã nguồn Arrowjs.io sau khi đã chỉnh sửa, tối ưu kiến
trúc
Gatling Core CMS
uDoctor Gatling
CMS
CMS
Core
Test
WordPress
CMS
if (interested) {
fork('https://github.com/arrowjs/CMS.git');
}
if (wantToJoinTeam) {
sendMail('cuong@techmaster.vn')
}
console.log('Thank you');
Trả lời câu hỏi
microservice
• Chia service theo các
bounded context
api-centric
• Tập trung các service lại để
tạo thành mộtAPI thống nhất
cho các client bên ngoài kết
nối
• Aggregate API service
Vì sao anh lại cần xây dựng Js framework
của riêng mình mà không dùng framework
cũ?
Việc tự phát triển framework riêng của
mình, song song/đồng thời với một app
cần cần framework đó trong dự án thật, có
deadline/mục tiêu là một dependency rủi
ro. Anh xử lý và suy nghĩ thế nào?
• Đã dùng Drupal, WordPress, PlayFramework,
Scala, một ít Rails.
• Học hỏi mỗi framework một số thứ
Real Application
Framework
Cải thiện hiệu
suất phát triển
Điều chỉnh
chức năng FW
Hiện tại em muốn nghiên cứu Nodejs
để phục vụ cho mục đích làm server
cho mobile app. Anh có giải pháp
nào hiệu quả để xây dựng server cho
mobile app có thể xử lý cho đa nền
tảng từ Android, iOS và
Windowphone ?
• REST/JSON
– Request – Response. Dễ lập trình, dễ quản lý. Dễ
scale out > dùng sticky session
• Realtime Notification
– Socket.io
– Scale out khó
• Dịch vụ cloud: parse, pubnub
Tạo server cho mobile app
https://github.com/daltoniam/Starscream
Best practices trong việc vận hành server
chạy ứng dụng Node ?
• Manage Node.js process > pm2
• Monitor > keymetrics, Winston, statsd
• Clustering - Caching
• Offload intensive CPU task to other task
queue
Tại sao lại dùng nodejs trong khi PHP làm
rất tốt công việc xây dựng CMS và có rất
nhiều Framework mạnh mẽ
Tại sao WordPress phát triển Calypso
100% trên JavaScript? 
Arrow.js có giải quyết vấn đề flexible deployment
(ví dụ deploy mà ko cần khởi động lại server) ko ?
và giải quyết như thế nào nếu có
Dev time: sử dụng nodemon
Production time:
- sửa template 50% không cần khởi động lại.
- khởi động lúc traffic xuống thấp . Boot time của
Node nhanh hơn Java web app rất nhiều
Arrow.js có giải quyết vấn đề scalability ko ? và
giải quyết như thế nào nếu có ?
Những khó khăn trong việc scale hệ
thống NodeJS ?
Distributed transaction
Những hạn chế của NodeJS
1. Single thread xử lý long run task
2. weak type
3. weak OOP
Những hạn chế của Arrowjs
1. BDD test chưa đủ
2. Giao diện cài đặt chưa dễ như
WordPress
3. Chưa tối ưu cho React
Kỹ thuật debugging thường sử dụng
trong quá trình phát triển web framework
/ CMS trên NodeJS
1. console.log
2. Jetbrains web storm debug
3. winston
4. debug module
Thời gian xây dựng Arrow.js là bao
lâu?
- Version 1: 1.5 tháng
- Nâng cấp 1.x cùng Techmaster.vn 5
tháng
- Version 2: 1 tháng
Cách chọn( hoặc hướng phát triển) của framwork(hoặc
cms) ở đây có phù hợp để đáp ứng tốt cho các dạng
ứng dụng khác nhau.
Ví dụ: như microservice và monolithic app.
1. Nếu tập trung cho monolithic app thì sẽ dư thừa tài
nguyên sử dụng khi xây dựng microservice.
2. Nếu tập trung cho microservice thì sẽ tốn kém khâu
tích hợp khi xây dựng monolithic app.
Thêm bớt
các thành
phần qua
cấu hình
hoặc code
Cần mở rộng đến đâu,
tách feature đến đó !
Xây dựng dựa trên framework có sẵn hoặc xây
dựng mới đều bắt buộc sử dụng những plugin
có sẵn(trường hợp không dùng có thể là hiếm
có). Khi plugin có sẵn đó update liệu việc
update cms có bị ảnh hưởng nhiều. Cách đảm
bảo tính ổn định của framwork(cms).
Arrowjs dựa rất nhiều module Node.js
Sẽ quy chuẩn spec cho feature và việc chuyển
sang microservice ngay
Để xây dựng một web framework hoàn chỉnh
có cần phải sử dụng thêm các công nghệ
khác không hay chỉ cần Node.js là đủ?
Monolithic App: Nginx + Node.js + Arrowjs
Microservice: cần bổ xung nhiều công cụ
khác, kết hợp message queue, Java, Golang…
Về mặt performance, Node.js có phù
hợp để xây dựng những hệ thống
phục vụ số lượng lớn người dùng hay
không?
Phải kết hợp nhiều công nghệ khác,
một mình Node.js chưa đủ
Node.js có phù hợp để xây dựng các hệ
thống đòi hỏi tính bảo mật cao như ngân
hàng hay tài chính không?
Javascript open source
Weak type
Có thể kết hợp Node.js + Java hoặc
Node.js + Go
Làm sao để xây dựng website tối ưu
nhất?
Cần tối ưu performance ?
Back end: right architecture…
Front end: uglify, minify, webpack,
ajax, websocket
Cách Node.js xử lý các tác vụ khác với mô
hình multi-thread cổ điển như sau
Ở multi-thread cổ điển, mỗi tác vụ sẽ được dành riêng một
thread độc lập để xử lý. Mỗi process sẽ có hữu hạn lượng
thread dự trữ trong thread pool. Nếu có nhiều tác vụ đang
chạy dở thì lượng thread còn lại trong thread pool sẽ giảm,
khả năng phục vụ kém đi.
Khi một tác vụ hoàn thành, thread được trả về thread pool
Arrowjs.io
Node.js có event loop để quản lý tác vụ đang chạy trong
queue. Event loop chạy trên 1 single thread. Các code
JavaScript đều chạy trên loop này. Node.js không cấp phát
thread riêng cho từng tác vụ. Tác vụ nào đang chờ kết quả,
thì thread sẽ dùng tiếp tác vụ sau. Kết quả trả về sẽ đăng ký
vào hàng đợi event loop để thực thi call back func
Các tác vụ có I/O đọc ghi file, network sẽ dùng hàm C/C++.
Trong Node.js có Libuv để giao tiếp với thread pool của hệ
điều hành tận dụng khả năng non-blocking I/O
Arrowjs.io
Arrowjs.io
Trong non blocking I/O, thread swiching vẫn xảy ra , khi
tác vụ A chờ, tác vụ B được chuyển vào chạy tiếp, giảm
thời gian chết khi chờ. Chi phí switching này thấp hơn
việc tạo ra thread mới, hay trả thread về pool.

Más contenido relacionado

La actualidad más candente

Chủ đề 9 wordpress - vũ mạnh cường
Chủ đề 9  wordpress - vũ mạnh cườngChủ đề 9  wordpress - vũ mạnh cường
Chủ đề 9 wordpress - vũ mạnh cườngVũ Mạnh Cường
 
Giới thiệu wordpress
Giới thiệu wordpressGiới thiệu wordpress
Giới thiệu wordpressMisu Kem
 
gioi thieu ve java
gioi thieu ve javagioi thieu ve java
gioi thieu ve javaDat Ngo
 
Bài giảng lập trình Java cơ bản - Java Programming
Bài giảng lập trình Java cơ bản - Java ProgrammingBài giảng lập trình Java cơ bản - Java Programming
Bài giảng lập trình Java cơ bản - Java ProgrammingVntalking Blog
 

La actualidad más candente (6)

Chủ đề 9 wordpress - vũ mạnh cường
Chủ đề 9  wordpress - vũ mạnh cườngChủ đề 9  wordpress - vũ mạnh cường
Chủ đề 9 wordpress - vũ mạnh cường
 
Wordpress
WordpressWordpress
Wordpress
 
Giới thiệu wordpress
Giới thiệu wordpressGiới thiệu wordpress
Giới thiệu wordpress
 
Gioi thieu ve_java
Gioi thieu ve_javaGioi thieu ve_java
Gioi thieu ve_java
 
gioi thieu ve java
gioi thieu ve javagioi thieu ve java
gioi thieu ve java
 
Bài giảng lập trình Java cơ bản - Java Programming
Bài giảng lập trình Java cơ bản - Java ProgrammingBài giảng lập trình Java cơ bản - Java Programming
Bài giảng lập trình Java cơ bản - Java Programming
 

Destacado

Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tếTechMaster Vietnam
 
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterChương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterTechMaster Vietnam
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTTechMaster Vietnam
 
Xd cms module cho hệ thống intranet của cty tma
Xd cms module cho hệ thống intranet của cty tmaXd cms module cho hệ thống intranet của cty tma
Xd cms module cho hệ thống intranet của cty tmaVcoi Vit
 
Thiết kế website khách sạn - Hotel Web design
Thiết kế website khách sạn - Hotel Web designThiết kế website khách sạn - Hotel Web design
Thiết kế website khách sạn - Hotel Web designLợi Đỗ
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgresTechMaster Vietnam
 
ITLC HN 14 - Bizweb Microservices Architecture
ITLC HN 14  - Bizweb Microservices ArchitectureITLC HN 14  - Bizweb Microservices Architecture
ITLC HN 14 - Bizweb Microservices ArchitectureIT Expert Club
 
Big data 5Vs 2014 - View from World to Vietnam by Dinh Le Dat
Big data 5Vs 2014 - View from World to Vietnam by Dinh Le DatBig data 5Vs 2014 - View from World to Vietnam by Dinh Le Dat
Big data 5Vs 2014 - View from World to Vietnam by Dinh Le DatDinh Le Dat (Kevin D.)
 
Bài 5: Hướng dẫn SEO cho website - Quản trị website
Bài 5: Hướng dẫn SEO cho website - Quản trị websiteBài 5: Hướng dẫn SEO cho website - Quản trị website
Bài 5: Hướng dẫn SEO cho website - Quản trị websiteMasterCode.vn
 
Bài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMS
Bài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMSBài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMS
Bài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMSMasterCode.vn
 
Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...
Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...
Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...AskSock Ngô Quang Đạo
 
Building a Social Network with MongoDB
  Building a Social Network with MongoDB  Building a Social Network with MongoDB
Building a Social Network with MongoDBFred Chu
 
Modeling Data in MongoDB
Modeling Data in MongoDBModeling Data in MongoDB
Modeling Data in MongoDBlehresman
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema DesignMongoDB
 
Common MongoDB Use Cases
Common MongoDB Use Cases Common MongoDB Use Cases
Common MongoDB Use Cases MongoDB
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMike Friedman
 

Destacado (19)

Knex Postgresql Migration
Knex Postgresql MigrationKnex Postgresql Migration
Knex Postgresql Migration
 
Postgresql security
Postgresql securityPostgresql security
Postgresql security
 
Minimum Viable Products
Minimum Viable ProductsMinimum Viable Products
Minimum Viable Products
 
Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tế
 
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterChương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTT
 
Xd cms module cho hệ thống intranet của cty tma
Xd cms module cho hệ thống intranet của cty tmaXd cms module cho hệ thống intranet của cty tma
Xd cms module cho hệ thống intranet của cty tma
 
Thiết kế website khách sạn - Hotel Web design
Thiết kế website khách sạn - Hotel Web designThiết kế website khách sạn - Hotel Web design
Thiết kế website khách sạn - Hotel Web design
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
 
ITLC HN 14 - Bizweb Microservices Architecture
ITLC HN 14  - Bizweb Microservices ArchitectureITLC HN 14  - Bizweb Microservices Architecture
ITLC HN 14 - Bizweb Microservices Architecture
 
Big data 5Vs 2014 - View from World to Vietnam by Dinh Le Dat
Big data 5Vs 2014 - View from World to Vietnam by Dinh Le DatBig data 5Vs 2014 - View from World to Vietnam by Dinh Le Dat
Big data 5Vs 2014 - View from World to Vietnam by Dinh Le Dat
 
Bài 5: Hướng dẫn SEO cho website - Quản trị website
Bài 5: Hướng dẫn SEO cho website - Quản trị websiteBài 5: Hướng dẫn SEO cho website - Quản trị website
Bài 5: Hướng dẫn SEO cho website - Quản trị website
 
Bài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMS
Bài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMSBài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMS
Bài 1 Tìm hiểu về Hệ Thống Quản Trị Nội Dung - CMS
 
Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...
Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...
Kế toán quản trị - Các phương pháp xác định chi phí trong doanh nghiệp sản xu...
 
Building a Social Network with MongoDB
  Building a Social Network with MongoDB  Building a Social Network with MongoDB
Building a Social Network with MongoDB
 
Modeling Data in MongoDB
Modeling Data in MongoDBModeling Data in MongoDB
Modeling Data in MongoDB
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
 
Common MongoDB Use Cases
Common MongoDB Use Cases Common MongoDB Use Cases
Common MongoDB Use Cases
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World Examples
 

Similar a Arrowjs.io

ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015IT Expert Club
 
giới thiệu về Asp.net core 2.0
giới thiệu về Asp.net core  2.0giới thiệu về Asp.net core  2.0
giới thiệu về Asp.net core 2.0VanSy9x
 
Giới thiệu Nuxt.js
Giới thiệu Nuxt.jsGiới thiệu Nuxt.js
Giới thiệu Nuxt.jsRobin Huy
 
Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0Huân Bùi Đình
 
Nodejs Introduction
Nodejs IntroductionNodejs Introduction
Nodejs Introductionthanh can
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...VKhang Yang
 
Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservicesTechMaster Vietnam
 
Pham Anh Tu - TK Framework
Pham Anh Tu - TK FrameworkPham Anh Tu - TK Framework
Pham Anh Tu - TK FrameworkVu Hung Nguyen
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXTechMaster Vietnam
 
Bootstrap Twiter 3.0 Presentation
Bootstrap Twiter 3.0 PresentationBootstrap Twiter 3.0 Presentation
Bootstrap Twiter 3.0 PresentationTí Bụng Bự
 
Tổng quan ASP.NET CORE - NIVIKI.COM
Tổng quan ASP.NET CORE - NIVIKI.COMTổng quan ASP.NET CORE - NIVIKI.COM
Tổng quan ASP.NET CORE - NIVIKI.COMKhoa Nguyen
 
Beezo Share - Donetnuke Deserialize
Beezo Share - Donetnuke DeserializeBeezo Share - Donetnuke Deserialize
Beezo Share - Donetnuke DeserializeBeezo
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake phplaonap166
 
Bao cao wesite bán giày.docx
Bao cao wesite bán giày.docxBao cao wesite bán giày.docx
Bao cao wesite bán giày.docxssuser11005a
 

Similar a Arrowjs.io (20)

ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
 
giới thiệu về Asp.net core 2.0
giới thiệu về Asp.net core  2.0giới thiệu về Asp.net core  2.0
giới thiệu về Asp.net core 2.0
 
Giới thiệu Nuxt.js
Giới thiệu Nuxt.jsGiới thiệu Nuxt.js
Giới thiệu Nuxt.js
 
Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0
 
Nodejs Introduction
Nodejs IntroductionNodejs Introduction
Nodejs Introduction
 
Code Camp #1
Code Camp #1Code Camp #1
Code Camp #1
 
Bizweb Microservices Architecture
Bizweb Microservices ArchitectureBizweb Microservices Architecture
Bizweb Microservices Architecture
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
 
Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservices
 
Sof301 slide1
Sof301   slide1Sof301   slide1
Sof301 slide1
 
Pham Anh Tu - TK Framework
Pham Anh Tu - TK FrameworkPham Anh Tu - TK Framework
Pham Anh Tu - TK Framework
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
 
Bootstrap Twiter 3.0 Presentation
Bootstrap Twiter 3.0 PresentationBootstrap Twiter 3.0 Presentation
Bootstrap Twiter 3.0 Presentation
 
Thutap
ThutapThutap
Thutap
 
Tổng quan ASP.NET CORE - NIVIKI.COM
Tổng quan ASP.NET CORE - NIVIKI.COMTổng quan ASP.NET CORE - NIVIKI.COM
Tổng quan ASP.NET CORE - NIVIKI.COM
 
Beezo Share - Donetnuke Deserialize
Beezo Share - Donetnuke DeserializeBeezo Share - Donetnuke Deserialize
Beezo Share - Donetnuke Deserialize
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
 
Bao cao wesite bán giày.docx
Bao cao wesite bán giày.docxBao cao wesite bán giày.docx
Bao cao wesite bán giày.docx
 
J query
J queryJ query
J query
 
jquery.pdf
jquery.pdfjquery.pdf
jquery.pdf
 

Más de TechMaster Vietnam

Cấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútCấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútTechMaster Vietnam
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differentlyTechMaster Vietnam
 
Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012TechMaster Vietnam
 
Prototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowPrototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowTechMaster Vietnam
 
Apple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese versionApple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese versionTechMaster Vietnam
 
Sinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tớiSinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tớiTechMaster Vietnam
 

Más de TechMaster Vietnam (15)

Neural Network from Scratch
Neural Network from ScratchNeural Network from Scratch
Neural Network from Scratch
 
Flutter vs React Native 2018
Flutter vs React Native 2018Flutter vs React Native 2018
Flutter vs React Native 2018
 
C đến C++ phần 1
C đến C++ phần 1C đến C++ phần 1
C đến C++ phần 1
 
Control structure in C
Control structure in CControl structure in C
Control structure in C
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
iOS Master - Detail & TabBar
iOS Master - Detail & TabBariOS Master - Detail & TabBar
iOS Master - Detail & TabBar
 
Cấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútCấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phút
 
Slide that wins
Slide that winsSlide that wins
Slide that wins
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differently
 
Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012
 
Making a living
Making a livingMaking a living
Making a living
 
Prototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowPrototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch Flow
 
Apple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese versionApple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese version
 
Sinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tớiSinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tới
 
Windows 8 vs android 4
Windows 8 vs android 4Windows 8 vs android 4
Windows 8 vs android 4
 

Arrowjs.io

  • 1. Xây dựng web framework + CMS trên Node.js Trịnh Minh Cường, http://techmaster.vn Toong, Hanoi 2015/11/27
  • 2. agenda = { intro: 'Why JavaScript, Node.js?', arrowjs: [ 'Dễ cài', 'Code nhanh', 'CMS', 'Chạy tít', 'Microservices' ], roadmap: [ 'Designer friendly', 'Dev friendly', 'User friendly' ], more: 'Tham khảo thêm'};
  • 3. Tại sao JavaScript và Node.js? Lập trình frond end & back end : 1 ngôn ngữ duy nhất
  • 5. Số repo trên Git tăng mạnh
  • 6. • WordPress > Calypso viết bằng 100% Node.js, React • IBM mua StrongLoop, chuyên Node.js • MicrosoftVisual Studio hỗ trợ Node.js • Dùng Node.js – Mobile.de – Walmart Canada – Linked In – Task Rabbit
  • 7. Visual Studio fully supports Node.js development
  • 8. JavaScript không chỉ có jQuery ! • Bi directional data binding – Meteor – Angular, Ember, Knockout – React, JSBlocks • Real time notification – WebSocket – Server Sent Event
  • 9. Sản phẩm cần nhiều công nghệ • Tăng đội phát triển. Tuyển người giỏi rất khó • Tăng thời gian, công sức kiểm thử • Chậm lại tiến độ ra sản phẩm
  • 10. Speed Is the Ultimate Startup Weapon Mike Cassidy
  • 11. • Dễ dùng, Dễ cài đặt • Dễ sửa đổi, lập trình mở rộng • Dễ kiếm theme, tạo theme • Tốc độ cao /Tốn ít tài nguyên • Không phí bản quyền • Cộng đồng lớn, nhiều thư viện có sẵn • Dễ scale out hoặc > microservice
  • 12. MVC Frameworks • Rails • ASP.net MVC • Django • Laravel, Phalcon, CodeIgnitor, CakePHP • Sails, Mean.io CMS • WordPress • Joomla • Drupal • Magento • ….
  • 13. framework do người Việt tham gia • NukeViet – PHP nhiều pluginshttps://github.com/nukeviet/nukeviet/ • XiTrum - Scala của ĐàoThanh Ngọc https://github.com/xitrum-framework/xitrum • Litpi – PHP củaVõ DuyTuấn http://litpiframework.com/ • Lotus – Ruby :Trung Lê và nhiều dev ởViệt nam http://lotusrb.org/
  • 14. Framework chỉ sống khi cả developer và theme designer đều dùng
  • 19. 1.Dễ cài 2. Code nhanh 3. CMS 4.Tốc độ - chịu tải 5. Microservices
  • 20. Install by bash bash <(curl –s http://arrowjs.io/install. sh)Cài đặt Node.js, Postgresql, Redis tự động clone CMS mới nhất. Đã kiểm thử trên CentOS 6, 7, Debian 8, Ubuntu 15.04, Fedora…
  • 21. Install by Node.js npm npm install arrowjs
  • 22. Install by Docker sudo docker pull arrowjs
  • 23. • Nâng cấp Node.js 4.x $wget http://node-arm.herokuapp.com/node_latest_armhf.deb $sudo dpkg -i node_latest_armhf.deb • Cài đặt Postgresql 9.4, Redis • Cài đặt CMS $git clone https://github.com/arrowjs/CMS.git cd cms npm install npm start
  • 24. 1. Dễ cài 2.Code nhanh 3. CMS 4.Tốc độ - chịu tải 5. Microservices
  • 25. Tạo web app yo arrowjs
  • 27. Demo • Tạo ứng dụng • Tạo feature • Tạo model • Kết nối cơ sở dữ liệu • Thử REST
  • 28. Theme – View Template {% extends "base.html" %} {% block header %} <h1>{{ title }}</h1> {% endblock %} {% block content %} <ul> {% for name, item in items %} <li>{{ name }}: {{ item }}</li> {% endfor %} </ul> {% endblock %}
  • 29. Arrowjs dùng Nunjucks template • Kế thừa ~ extend • Tái sử dụng ~ marco, include, block • Logic ~ if, for, range, cycler • Xử lý async • Compile sẵn để tăng tốc
  • 30. Sequelize ORM • Postgresql, MySQL, MariaDB, SQLite, MSSQL • Model definition, relations • Hook: cài đặt sự kiện trước, sau lệnh SQL – Instance Hook, Model Hook • Raw Query: khi ORM bất lực • ManagedTransaction • Migration: chỉnh sửa, nâng cấp db schema
  • 31. 1. Dễ cài 2. Code nhanh 3.CMS 4.Tốc độ, chịu tải 5. Microservices
  • 33. Demo • Chức năng tạo post • Quản lý user • Phân quyền theo role • Chuyển đổi theme
  • 34. 1. Dễ cài 2. Code nhanh 3. CMS 4.Tốc độ, chịu tải 5. Microservices
  • 35. So sánh với Mean.js, Sail.js • Cả 3 cùng sử dụng Express • Arrowjs: Promise BlueBird thay callback cổ điển • Phần core đơn giản, tối thiểu • Đội benchmark độc lập (sv Bách Khoa) sử dụng Gatling.io • Mean.js không bỏ morgan, cònArrowjs và Sailjs nên sẽ chậm hơn một chút
  • 36. 0 100 200 300 400 500 600 700 800 Mean req/s Min Max Mean Std Deviation ArrowJS MeanJS SailsJS HelloWorld, 1000 concurrent users, no cache CPU: 1 Core RAM: 2G Debian 8.x, Node 4.2.2
  • 37. 0 200 400 600 800 1000 1200 1400 1600 1800 Mean req/s Min Max Mean Std Deviation ArrowJS MeanJS SailsJS Render View, 1000 concurrent users, no cache CPU: 1 Core RAM: 2G Debian 8.x, Node 4.2.2
  • 38. Duy nhất 01 Node.js process
  • 39. Tận dụng nhiều Node.js process
  • 41. Triết lý module hóa Node.js phù hợp với Microservice
  • 42. Feature = Model + Controller + View (Theme) + Routes
  • 43. Cần mở rộng đến đâu, tách feature đến đó !
  • 44. Demo • Kết nối ActionHero • Xử lý long run task – Không để long run task chiếm CPU time của ứng dụng Node.js – Chuyển nó qua service khác.
  • 46. Để Arrowjs tiếp tục phát triển và hữu ích?
  • 47. • Ví dụ hữu ích, dùng trong nhiều trường hợp • Document +Tutorial http://arrowjs.github.io/ArrowjsCore/ • Bổ xungTest tự động • Hỗ trợ các start up ứng dụng Arrowjs • Mở khóa học trực tuyến đào tạo Arrowjs Chúng tôi sẽ làm gì
  • 48. • Hợp tác design studio nâng cao UX với theme designer • Hướng dẫn chuyển theme miễn phí Hợp tác với theme design house Arrowjs.io
  • 49. Lộ trình phát triển • BDD UnitTest 100% • Cấu hình cài đặt web site dễ nhưWordPress • Tool tự động convertWordPress theme sang Arrowjs • Tạo MVC app hiệu suất như Rails • Ví dụ, pattern để scale out, chuyển sang Microservice tiện lợi, hiệu quả
  • 51. Công cụ hay • Browserify: giúp browser dùng được Node.js modules • Grunt, Gulp: thực thi task xử lý hậu kỳ: uncss, minify, uglify • Mocha, Chai, Jasmine: kiểm thử tự động • Yo: tự động gen code theo mẫu • PM2: quản lý nhiều Node.js process, load balance, tự khởi động lại
  • 52. Thư viện tốt • Lodash: tập các hàm xử lý tập, đối tượng. Dễ hơn Scala • Sequelize: ORM cho Postgresql, MySQL, SQLite… • Passport: authentication nhiều kiểu đăng nhập • Nunjucks: template engine • Winston: log to file, database, cloud…
  • 53. Chuyên cho Microservice • Restify: chuyên tạo REST web service • ActionHero: scalableAPI server • Seneca: microservice toolkit • Kafka Node: Kafka client • ZMQ: ZeroMQ client
  • 54. Dịch vụ cloud trả phí > giảm công sức code • Keymetrics: báo thông số, lỗi hệ thống • Graylog: thu thập thông tin, log
  • 55. Node.js chống chỉ định > cách xử lý • Tác vụ tốn CPU time, cần multi-thread > Message queue gọi task runner viết bằng C++, Java, .NET, Go • Đóng mã nguồn > UglifyJS, Obfuscator, JSScrambler,
  • 57. JavaScript Scala Object Oriented Programming 3 10 Easy to learn 8 4 Strong Type 1 10 Community 10 2 Reusable libraries 10 4 Code speed 8 6 Friendly to frond end 10 0 Friendly to back end 3 8 BDD, TDD 9 4 Performance 3 7 65 55
  • 60. Golang bù đắp điểm yếu của JavaScript • Tốc độ thực thi x 1.2 Java • Cần ít bộ nhớ hơn Java • Co-routines – Multithread • Biên dịch ra mã nhị phân • Tương đồng với JS: REPL, weak OOP, cú pháp đơn giản
  • 61. Con đường đi đến Node.js và Arrowjs.io
  • 62. 10/2011 Techmaster.vn Drupal 6.x Mua theme sẵn, khó chỉnh sửa 04/2012 Techmaster.vn > WordPress 3.x Theme responsive, free. Có nhiều plugin rất thích 08/2013 Dự án gia công trên PHP Kohana. Không ấn tượng lắm
  • 63. 12/2013 PHP Phalcon 1.x cho các dự án Úc 04/2014 Thử nghiệm Rails, Play. Scala có vẻ cool, cú pháp expressive Chọn Play Framework, Scala cho dự án hocngay.com 08/2014 Scala khó học, tốc độ Play Framework không thực sự nổi trội, tốn nhiều RAM khi cập nhật code mới Sau 2 dự án PlayFramework, quyết định dừng
  • 64. 09/2014 Sử dụng Phalcon để xây dựng lại toàn bộ ứng dụng 10/2014 Chuyển xong. Phalcon PHP lập trình hiệu suất cao Nhưng PHP không hỗ trợ Real Time Notification 11/2014 Tạm dừng dự án đào tạo trực tuyến do Dev phải gia công kiếm tiền trước
  • 65. 12/2014 Dùng WordPress + WPLMS plugin làm site đào tạo trực tuyến Chạy rất chậm, hệ thống cực phức tạp, nếu sửa thì không thể cập nhật bản mới. WordPress suck ! 01/2015 Sử dụng Node.js tạo web service và real time notification cho ứng dụng mobile. Thử nghiệm Mean.js. Loại Mean.js do nó gắn chặt MongoDB và Angularjs 04/2015 Xây dựng framework MVC nội bộ sử dụng Postgresql, Sequelize lấy tên là Arrowjs.io
  • 66. 05/2015 Benchmark Arrowjs vs WordPress đã cache. Arrowjs tốc độ vượt hơn 10/2015 Hệ thống đào tạo trực tuyến 1.0 xong Có 700 học viên đăng ký 11/2015 Mở mã nguồn Arrowjs.io sau khi đã chỉnh sửa, tối ưu kiến trúc
  • 67. Gatling Core CMS uDoctor Gatling CMS CMS Core Test WordPress CMS
  • 68. if (interested) { fork('https://github.com/arrowjs/CMS.git'); } if (wantToJoinTeam) { sendMail('cuong@techmaster.vn') } console.log('Thank you');
  • 70. microservice • Chia service theo các bounded context api-centric • Tập trung các service lại để tạo thành mộtAPI thống nhất cho các client bên ngoài kết nối • Aggregate API service
  • 71. Vì sao anh lại cần xây dựng Js framework của riêng mình mà không dùng framework cũ? Việc tự phát triển framework riêng của mình, song song/đồng thời với một app cần cần framework đó trong dự án thật, có deadline/mục tiêu là một dependency rủi ro. Anh xử lý và suy nghĩ thế nào?
  • 72. • Đã dùng Drupal, WordPress, PlayFramework, Scala, một ít Rails. • Học hỏi mỗi framework một số thứ Real Application Framework Cải thiện hiệu suất phát triển Điều chỉnh chức năng FW
  • 73. Hiện tại em muốn nghiên cứu Nodejs để phục vụ cho mục đích làm server cho mobile app. Anh có giải pháp nào hiệu quả để xây dựng server cho mobile app có thể xử lý cho đa nền tảng từ Android, iOS và Windowphone ?
  • 74. • REST/JSON – Request – Response. Dễ lập trình, dễ quản lý. Dễ scale out > dùng sticky session • Realtime Notification – Socket.io – Scale out khó • Dịch vụ cloud: parse, pubnub Tạo server cho mobile app https://github.com/daltoniam/Starscream
  • 75. Best practices trong việc vận hành server chạy ứng dụng Node ? • Manage Node.js process > pm2 • Monitor > keymetrics, Winston, statsd • Clustering - Caching • Offload intensive CPU task to other task queue
  • 76. Tại sao lại dùng nodejs trong khi PHP làm rất tốt công việc xây dựng CMS và có rất nhiều Framework mạnh mẽ Tại sao WordPress phát triển Calypso 100% trên JavaScript? 
  • 77. Arrow.js có giải quyết vấn đề flexible deployment (ví dụ deploy mà ko cần khởi động lại server) ko ? và giải quyết như thế nào nếu có Dev time: sử dụng nodemon Production time: - sửa template 50% không cần khởi động lại. - khởi động lúc traffic xuống thấp . Boot time của Node nhanh hơn Java web app rất nhiều
  • 78. Arrow.js có giải quyết vấn đề scalability ko ? và giải quyết như thế nào nếu có ?
  • 79. Những khó khăn trong việc scale hệ thống NodeJS ? Distributed transaction
  • 80. Những hạn chế của NodeJS 1. Single thread xử lý long run task 2. weak type 3. weak OOP
  • 81. Những hạn chế của Arrowjs 1. BDD test chưa đủ 2. Giao diện cài đặt chưa dễ như WordPress 3. Chưa tối ưu cho React
  • 82. Kỹ thuật debugging thường sử dụng trong quá trình phát triển web framework / CMS trên NodeJS 1. console.log 2. Jetbrains web storm debug 3. winston 4. debug module
  • 83. Thời gian xây dựng Arrow.js là bao lâu? - Version 1: 1.5 tháng - Nâng cấp 1.x cùng Techmaster.vn 5 tháng - Version 2: 1 tháng
  • 84. Cách chọn( hoặc hướng phát triển) của framwork(hoặc cms) ở đây có phù hợp để đáp ứng tốt cho các dạng ứng dụng khác nhau. Ví dụ: như microservice và monolithic app. 1. Nếu tập trung cho monolithic app thì sẽ dư thừa tài nguyên sử dụng khi xây dựng microservice. 2. Nếu tập trung cho microservice thì sẽ tốn kém khâu tích hợp khi xây dựng monolithic app.
  • 85. Thêm bớt các thành phần qua cấu hình hoặc code
  • 86. Cần mở rộng đến đâu, tách feature đến đó !
  • 87. Xây dựng dựa trên framework có sẵn hoặc xây dựng mới đều bắt buộc sử dụng những plugin có sẵn(trường hợp không dùng có thể là hiếm có). Khi plugin có sẵn đó update liệu việc update cms có bị ảnh hưởng nhiều. Cách đảm bảo tính ổn định của framwork(cms). Arrowjs dựa rất nhiều module Node.js Sẽ quy chuẩn spec cho feature và việc chuyển sang microservice ngay
  • 88. Để xây dựng một web framework hoàn chỉnh có cần phải sử dụng thêm các công nghệ khác không hay chỉ cần Node.js là đủ? Monolithic App: Nginx + Node.js + Arrowjs Microservice: cần bổ xung nhiều công cụ khác, kết hợp message queue, Java, Golang…
  • 89. Về mặt performance, Node.js có phù hợp để xây dựng những hệ thống phục vụ số lượng lớn người dùng hay không? Phải kết hợp nhiều công nghệ khác, một mình Node.js chưa đủ
  • 90. Node.js có phù hợp để xây dựng các hệ thống đòi hỏi tính bảo mật cao như ngân hàng hay tài chính không? Javascript open source Weak type Có thể kết hợp Node.js + Java hoặc Node.js + Go
  • 91. Làm sao để xây dựng website tối ưu nhất? Cần tối ưu performance ? Back end: right architecture… Front end: uglify, minify, webpack, ajax, websocket
  • 92. Cách Node.js xử lý các tác vụ khác với mô hình multi-thread cổ điển như sau Ở multi-thread cổ điển, mỗi tác vụ sẽ được dành riêng một thread độc lập để xử lý. Mỗi process sẽ có hữu hạn lượng thread dự trữ trong thread pool. Nếu có nhiều tác vụ đang chạy dở thì lượng thread còn lại trong thread pool sẽ giảm, khả năng phục vụ kém đi. Khi một tác vụ hoàn thành, thread được trả về thread pool
  • 94. Node.js có event loop để quản lý tác vụ đang chạy trong queue. Event loop chạy trên 1 single thread. Các code JavaScript đều chạy trên loop này. Node.js không cấp phát thread riêng cho từng tác vụ. Tác vụ nào đang chờ kết quả, thì thread sẽ dùng tiếp tác vụ sau. Kết quả trả về sẽ đăng ký vào hàng đợi event loop để thực thi call back func Các tác vụ có I/O đọc ghi file, network sẽ dùng hàm C/C++. Trong Node.js có Libuv để giao tiếp với thread pool của hệ điều hành tận dụng khả năng non-blocking I/O
  • 97. Trong non blocking I/O, thread swiching vẫn xảy ra , khi tác vụ A chờ, tác vụ B được chuyển vào chạy tiếp, giảm thời gian chết khi chờ. Chi phí switching này thấp hơn việc tạo ra thread mới, hay trả thread về pool.