12 điều răn

The Twelve Factors

I. Codebase
One codebase tracked in revision control, many deploys
Quản lý source code bằng Git, Git Flow,…
II. Dependencies
Explicitly declare and isolate dependencies
Quản lý thư viện mà ứng dụng phụ thuộc bằng khai báo ra file cụ thể (kiểu như package.json trong Node.js).
III. Config
Store config in the environment
Lưu cấu hình vào biến môi trường để dễ dàng thay đổi mà không thay đổi code.
IV. Backing services
Treat backing services as attached resources
Coi dịch vụ CSDL, Message Queue phía sau là tài nguyên có thêm / bớt dễ dàng. Ứng dụng tuyệt đối không nên gắn chặt sống còn vào một tài nguyên cụ thể nào vì điều này khiến hệ thống khó mở rộng.
V. Build, release, run
Strictly separate build, release and run stages
Tách bạch hoàn toàn 3 stages: build – release – run.
VI. Processes
Execute the app as one or more stateless processes
Vận hành ứng dụng bằng nhiều tiến trình không lưu giữ trạng thái (stateless process). Stateless process sẽ giúp hệ thống mở rộng tốt hơn, dễ hơn, ít lỗi hơn so với state process.
VII. Port binding
Export services via port binding
Cung cấp dịch vụ qua các port khác nhau – sử dụng port binding. Đây là mô hình API Gateway trong microservice.
VIII. Concurrency
Scale out via the process model
Mở rộng bằng thêm nhiều dịch vụ độc lập chứ không bằng cách tăng sức mạnh phần cứng.
IX. Disposability
Maximize robustness with fast startup and graceful shutdown
Khởi động nhanh – thu hồi sạch sẽ tốt hơn khởi động chậm, khi thoát không giải phóng hết bộ nhớ.
X. Dev/prod parity
Keep development, staging, and production as similar as possible
Môi trường DEV, SIT, UAT, PRD nên càng giống nhau càng tốt giúp dễ gỡ rối và chuyển từ môi trường DEV lên PRD mới nhanh và liên tục được.
XI. Logs
Treat logs as event streams
Coi log là một chuỗi sự kiện thời sự để xử lý thời gian thực.
XII. Admin processes
Run admin/management tasks as one-off processes
Quản trị hệ thống nên là một tiến trình độc lập, có thể gắn – hoặc tách ra khỏi ứng dụng đang chạy.

NodeJS kết nối database MS SQL Server

Chuẩn bị đồ nghề

Chạy lệnh sau để tạo một webapp hello-mssql :

$mkdir helloworld && cd hello-mssql && npm init -y && npm install express && touch index.js

Copy đoạn code sau vào file index.js

const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('Hello MS SQL!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Run $node index.js

Chi tiết có thể xem thêm ở đây.

Bắt đầu nấu nướng

Chuẩn bị một database SQL Server: trong bài này mình sử dụng SQL Server 2014 với sample database AdventureWorks2014. Các bạn có thể download sample ở đây.

Cài đặt thư viện mssql vào ứng dụng. Thư viện này dùng để kết nối và query thông tin trong database SQL Server:

npm install mssql --save

Ghi đè nội dụng sau vào file index.js

const express = require('express')
const app = express()
const port = 3000
var sql = require('mssql');

app.listen(port, () => console.log(`Example app listening on port ${port}!`))


app.get('/', (req, res) => {
  var config = {
    user: 'sa',
    password: 'xxxxx',
    server: '192.168.1.100', 
    port:1433,
    database: 'AdventureWorks2014',
    options: {
      trustedConnection: true,
      encrypt: false
    } 
  }
  
  sql.connect(config, function (err) {

    if (err) console.log(err);
  
    // create Request object
    var request = new sql.Request();
  
    // query to the database and get the records
    request.query('SELECT TOP 10 [Name],[ProductNumber] FROM [Production].[Product]', function (err, recordset) {
      sql.close()

      if (err) {
        res.send(err)
      }
        
      res.send(JSON.stringify (recordset))
    })
  })
})

Save and run $node index.js

Vào Chrome chạy và test thử http://localhost:3000

Gender Detection API

Gender Detection API là gì?

Gender Detection API là một rest API để xác định giới tính dựa vào tên của người Việt. API này giúp tạo ta những form tự động điền giới tính. Thử tưởng tượng khi bạn lập trình một form nhập liệu, trong đó có trường “Họ và tên” và “Giới tính”. Nếu có một công cụ nào đó khi khách hàng của bạn chỉ cần nhập họ và tên, hệ thống tự detect ra giới tính tương ưng, việc này giúp giảm thiểu thời gian cho khách hàng của bạn rất nhiều, giúp tăng cường UI/UX ứng dụng của bạn.

Link

http://khangle.tech

Cách sử dụng

  • Sử dụng lệnh Curl
    $ curl -X POST "http://khangle.tech/gender" -H "accept: */*" -H "Content-Type: application/json" -d "{\"fullName\":\"Trương Thị Thanh Bình\"}"
  • Sử dụng Postman

Docker with Vultr

Vultr là gì?

Vultr là nhà cung cấp dịch vụ VPS Server, Cloud Server với 100% phần cứng SSD, 15 datacenter location trải dài trên khắp thế giới. Ưu điểm của Vultr là giá rẻ, hiệu năng cao và cài đặt dễ dàng, nhanh chóng. Chỉ cần 1 ly trà sữa/1 tháng là có thể có 1 server để cho bạn vọc vạch. Đăng ký Vultr ở đây.

Vultr Logo

Tạo một Docker trên Vultr

Đăng nhập vào Vultr

Sau khi đã đăng ký Vultr và kích hoạt thành công, bạn sẽ truy cập vào trang quản trị tài khoản bằng địa chỉ https://my.vultr.com/.

Nếu đăng nhập lần đầu và chưa có server nào được tạo bạn sẽ nhìn thấy màn hình tạo Server ngay. Nếu bạn đã tạo server bạn sẽ thấy màn hình như sau:

Bây giờ bạn hãy bấm vào nút dấu cộng (+) để tạo server mới:

  • Vultr có rất nhiều vị trí đặt server trải dài từ châu Mỹ, châu Âu, châu Úc và châu Á. Tùy thuộc vào đối tượng khách truy cập bạn muốn hướng tới mà chọn vị trí phù hợp. Ví dụ bạn ưu tiên đối tượng ở Việt Nam thì nên chọn vị trí là Singapore hoặc Tokyo cho gần Việt Nam.
  • Chọn tab Application, chọn Docker, có 2 option lựa chọn là Ubuntu hay CentOS. Tuỳ bạn rành về OS nào thì chọn OS đó. Ở đây mình chọn CentOS.
  • Chon Server Size. Tuỳ nhu cầu mà mình lựa chọn size phù hợp. Nếu chỉ để test thì nên chọn gói thấp nhất 5USD/tháng.
  • Sau đó nhấn nút Deploy Now
  • Quá trình cài đặt có thể mất ít phút. Sau khi cài đặt xong bạn sẽ có được IP và tài khoản root để đăng nhập qua SSH.
  • Mở Terminal gõ $ssh root@<IP address> để vào server này.
  • Sau khi login gõ docker --version để kiểm tra version của Docker

Deploy một app lên Vultr

Để deploy một image lên Docker, có 2 cách:

  • Cách 1: deploy 1 image từ local Docker lên Vultr:
    • Lưu image tử local Docker thành file zip: $docker save <image-name> | gzip > <image-name>.tar.gz
    • Copy file zip này lên server Vultr: $scp <image-name>.tar.gz root@<IP adress>:/root/image_zips/
    • SSH vào server Vultr, deploy image này lên Docker: $docker import <path-of-image-name>
    • Chạy lệnh $docker images để kiểm tra xem image đã import thành công hay chưa
    • Chạy lệnh docker run --rm -d -p <HOST_PORT>:<CONTAINER_PORT> <image-name>:latest để start app
  • Cách 2: copy source-code từ local lên server Vultr bằng lệnh scp. Sau đó tiến hành tạo deploy như local. Xem ở đây

Counting Apple

Can you recognize Apples among many fruits? Can you count how many Apples in the board of fruits are? Let’s try and enjoy it.

– How to play:
+ Counting all Apples in the board.
+ Compare with the big number on the big Apple in the big circle.
+ Chose the correct answer (true or false) as quickly as you can to enjoy the the piano music.

– Reach the high score, compete with other players around the world.

– Follow me on Twitter: https://twitter.com/khanglbtk
– Visit my website: http://khangle.me

Appstore link: Appstore