Professional Documents
Culture Documents
1. Design System.........................................................................................................................1
Về tích hợp hệ thống legary và các vấn đề nonblocking, thì bạn Phương có kinh nghiệm
chưa nhiều và chưa có hệ thống về các cách protocol kết nối. Bạn mới chỉ quen với API
nhưng các kiểu tích hợp như ESB thì chưa có thời gian đào sâu.
TCP/IP/HTTP/HTTPS/FTP/SSH/SMTP/DNS/POP 3/IMAP
https://tltvietnam.vn/protocol-la-gi-va-cac-loai-protocol-pho-bien-
hien-nay.html
Protocol là một tiêu chuẩn được sử dụng để định nghĩa một phương
thức trao đổi dữ liệu qua mạng máy tính, như là local area network
(LAN), Internet, Intranet,… Mỗi protocol có những phương thức định
dạng dữ liệu riêng khi được gửi và cần phải làm những gì một khi nó
nhận dữ liệu, các dữ liệu được nén lại hay cách kiểm tra lỗi dữ liệu.
Giao thức phổ biến và quan trọng nhất hiện nay trong thế giới internet
là TCP (transmission control protocol/internet protocol) được sử dụng
để trao đổi thông tin liên lạc giữa các máy tính được kết nối internet.
Giao thức HTTP (Hypertext Transfer Protocol) được sử dụng để truyền
dữ liệu qua www hay world wide web (Internet), được truyền bởi
TCP/IP.
Toàn bộ các hoạt động truyền dữ liệu trên mạng đều được chia
thành nhiều bước riêng biệt bao gồm cả hệ thống. Ở mỗi bước thì lại
có một số hoạt động được diễn ra và người dùng sẽ không thể biết
được nó diễn ra ở bất kỳ bước nào khác. Mỗi bước sẽ có những
nguyên tắc và giao thức riêng như sau:
Tất cả các bước phải được thực hiện theo một trình tự nhất định
giống nhau trên mỗi máy tính mạng. Đối với những bước ở máy tính
gửi thì phải được thực hiện từ trên xuống dưới, còn ở máy tính nhận
thì chúng sẽ phải được thực hiện từ dưới lên
2. Blocking và Non-Blocking
Phần phía trên miêu tả sự hoạt động theo cơ chế Blocking mà ở đây mặc dù không có sự liên đới giữa 3 việc, nhưng
các công việc tiếp sau luôn phải chờ công việc phía trước thực sự xong rồi mới có thể bắt đầu thực hiện. Các bước
sẽ được mô tả như dưới đây
1. Hàm dataSync1.get() được gọi để lấy dữ liệu, vì nó là Blocking nên trước khi công việc này
hoàn thành các việc tiếp sau sẽ phải đợi
2. Hàm printData(d1) được gọi để in dữ liệu lấy về từ dataSync1.get(), tương tự nó cũng
là Blocking
3. Hàm dataSync2.get() được gọi để lấy dữ liệu, mặc dùng là nó không liên quan gì đến hai
dòng lệnh trên, nhưng đến tận bây giờ nó mới được thực hiện và là Blocking nên chiếm một
khoảng thời gian xử lý nữa
4. Hàm printData(d2) được gọi để in dữ liệu lấy về từ dataSync2.get(), là Blocking
5. Hàm dataSync3.get() được gọi để lấy dữ liệu, là Blocking
6. Hàm printData(d3) được gọi để in dữ liệu lấy về dataSync3.get(), là Blocking
Ở phần này, mọi thao tác đều là blocking nên thời gian để thực hiện xong hết các thao tác sẽ bằng tổng thời gian của
từng thao tác.
Phía dưới là phần thể hiện việc làm tất cả những việc trên, các thao tác in dự
liệu printData(d1), printData(d2), printData(d3) vẫn là các thao tác Blocking nhưng ở đây có sự
tham gia của Non-Blocking trong các thao tác lấy dữ
liệu dataAsync1.get(), dataAsync2.get(), dataAsync3.get(). Các thao tác Non-Blocking sẽ được
bắt đầu gần như ngay lập tức và không cần phải chờ các thao tác phía trước thực hiện xong. Sau khi có kết quả các
thao tác Non-Blocking sẽ gọi lại callback để in kết quả trả về ra màn hình. Cụ thể sẽ được diễn giải như ở dưới đây:
1. Hàm dataAsync1.get() được gọi để lấy dự liệu, vì nó là Non-Blocking nên quá trình thực
thi sẽ không phải dừng ở đây mà tiếp tục thực hiện dòng lệnh tiếp sau gần như ngay lập tức, tất
nhiên vẫn phải sau khi đăng ký một callback để in ra dữ liệu trả về từ dataAsync1.get().
2. Như nói ở trên, ngay sau đó, hàm dataAsync2.get() được gọi cùng với đăng ký callback. Vì
là Non-Blocking nên quá trình cũng giống như trên.
3. Tiếp theo hàm dataAsync3.get() cũng được thực hiện tương tự. Đến đây, 3 hàm gọi để lấy
dữ liệu gần như được thực hiện đồng thời mà không cần phải chờ nhau.
4. Trong khi hàm dataAsync1.get() và dataAsync3.get() đang thực hiện thì
hàm dataAsync2.get() đã lấy được dữ liệu về, lúc này callback được gọi để in dữ liệu đó ra
màn hình, trong callback lúc này printData(d2) được gọi và nó là Blocking.
5. Trong thời gian printData(d2) đang thực hiện, dataAsync1.get() đã hoàn tất việc lấy
dữ liệu, callback của nó được gọi tuy nhiên vì printData(d2) là Blocking và đang thực hiện
nên việc thực hiện printData(d1) sẽ phải chờ.
6. Cũng tương tự như trên, dataAsync3.get() cũng hoàn tất việc lấy dữ liệu, callback của nó
được gọi, lần này printData(d3) không những phải chờ printData(d2) như trên mà nó
còn phải chờ thêm cả printData(d1) bởi vì printData(d1) cũng là Blocking. Sau khi
cả printData(d2) và printData(d1) được hoàn thành thì printData(d3) được thực
hiện và toàn bộ quá trình hoàn tất.
Bây giờ nhìn lại hình vẽ một lần nữa ta có thể thấy Non-Blocking rút ngắn thời gian thực hiện chương trình hơn là
Blocking, việc rút ngắn thời gian này không phải vì các công việc được thực hiện nhanh hơn mà vì nhiều việc được
thực hiện cùng một lúc hơn.
3. Giới thiệu.
Ngày nay, khi sự phát triển vươn tới những đỉnh cao mới, nhu cầu về làm chủ tri thức của
con người được đặt lên hàng đầu. Do đó, thông tin dữ liệu cần phải được dễ dàng truy
xuất, độ tin cậy, tính chính xác cao và luôn luôn sẵn sàng phục vụ. Theo thời gian, sự
phát triển về công nghệ và nhu cầu của con người đã xuất hiện những hệ thống hoạt động
và trao đổi dữ liệu theo những kiến trúc mới và đặt ra thách thức là các kiến trúc mới này
cần trao đổi dữ liệu và có thể phối hợp nhịp nhàng với những hệ thống cũ. Do đó người ta
đã đưa ra giải pháp tích hợp hệ thống để giải quyết vấn đề này.
4.5.
Thống kê và trạng trái (Statistic & status): Thành phần này cung cấp
những thống kê về về những dịch vụ được tích hợp của ESB như số
lượng lỗi, độ trễ khi xử lý thông điệp, số lượng lỗi…
Cảnh báo (Alert): Cung cấp cơ chế gửi cảnh báo thông qua các kênh
khác nhau để thuận tiện cho việc giám sát hoạt động của trục tích
hợp.
Cân bằng tải (Load balancing): Một endpoint (điểm cuối) có thể có
trên nhiều hệ thống vật lý khác nhau, thành phần cân bằng tải này
có thể giúp cho việc gọi tới endpoint này được san đều ra giữa các
endpoint vật lý. Thành phần cân bằng tải này thường được triển khai
theo thuật toán Round Robin có trọng số.
Giới hạn thông điệp (Message Throttling): Việc giới hạn số lượng
thông điệp gửi tới server trong một khoảng thời gian là một điều cần
làm để việc hệ thống bị quá tải.
Quản lý cấu hình: Cho phép điều chỉnh cấu hình của ESB một cách
an toàn trên hệ điều hành, ngoài ra nó còn có thể lưu lại lịch sử
chỉnh sửa để có thể khôi phục ESB về trạng thái trước đó đề phòng
trường hợp cấu hình không phù hợp gây ra lỗi hệ thống.
Định tuyến thông điệp (Message Routing): Định tuyến thông điệp tới
đúng dịch vụ mà chúng cần tới dựa vào tiêu đề (header), nội dung và
giao thức của thông điệp.
Chuyển đổi thông điệp (Message tranformation): Cho phép chuyển
đổi định dạng thông điệp từ dạng này sang dạng khác, ví dụ như từ
kiểu XML sang JSON, từ dạng text sang nhị phân và ngược lại.
Chuyển dịch giao thức (Protocol Translation): Khả năng chuyển đổi
từ một giao thức truyền thông này này sang một giao thức truyền
thông khác, ví dụ như từ FTP sang HTTP.
Xác nhận thông điệp (Message Validation): Có khả năng đảm bảo
thông điệp là hợp lệ, ví dụ như trong trường hợp định dạng là JSON,
chúng ta cần đảm bảo rằng nội dung của thông điệp đúng với cú
pháp của định dạng này.
Giao dịch (Transaction): Tương tự như khái niệm về Transaction của
hệ quản trị cơ sở dữ liệu quan hệ, ESB cung cấp cho chúng ta sự
toàn vẹn trong việc xử lý thông điệp. Nếu như trong luồng xử lý
thông điệp, một tiến trình xử lý bị lỗi thì toàn bộ quá trình sẽ được
huỷ bỏ và khôi phục về như ban đầu.
Xác thực (Authentication): Xác thực người dùng khi truy cập tới dịch
vụ được tích hợp vào ESB.
Uỷ quyền (Authorization): Cung cấp chức năng uỷ quyền thiết lập
ESB cho người quản trị hoặc phân theo vai trò của người quản trị.
Mã hoá và giải mã (Encryption): Cung cấp chức năng mã hoá và giải
mã thông điệp.
Mule ESB
Là một Java-based ESB được phát triển bởi Mulesoft. So với các ESBs khác
thì Mule rất nhẹ nhưng nó đem lại khả năng mở rộng cao, cho phép người
dùng có thể bắt đầu với những tích hợp nhỏ và tăng dần số lượng lên theo
thời gian một cách dễ dàng. Các công nghệ chính được sử dụng trong Mule
ESB:
Oracle ESB
Là một ESB được phát triển bởi Oracle, là phiên bản dựa trên sản phẩm
trước đó của hãng này là Retail Integration Bus Essentials. Oracle ESB được
tối ưu để tích hợp các dịch vụ được cung cấp bởi Oracle, ngoài ra nó cũng
vẫn có thể tích hợp được các ứng dụng của bên thứ ba khác. Các công
nghệ chính được sử dụng trong Oracle ESB:
References:
Chúng ta thường bắt gặp thuật ngữ Legacy trong một quá trình chuyển đổi, ví dụ
khi chuyển dữ liệu từ hệ thống cũ sang cơ sở dữ liệu mới.
https://www.fis.com.vn/Views/system-integration
https://viblo.asia/p/huong-dan-day-du-ve-test-migration-du-lieu-phan-1-
4P856PeaZY3
3 cách tiếp cận phổ biến trong xây dựng một nền tảng tích hợp và phốI hợp
https://digital.fpt.com.vn/nen-tang-tich-hop-va-phoi-hop
“Bạn mới chỉ quen với API nhưng các kiểu tích hợp như ESB thì chưa có thời
gian đào sâu”
https://viblo.asia/p/enterprise-service-bus-esb-la-gi-va-mot-vai-esb-pho-bien-hien-
nay-LzD5dgwWljY
https://helpex.vn/article/cac-mau-tich-hop-doanh-nghiep-tu-esb-den-esp-va-api-
609081ee101a480c64e9b57a
So sá nh mẫ u tích hợ p ESB, ESP và API
So vớ i hai mẫ u khá c, ESB thiếu sự hỗ trợ từ cá c cô ng nghệ đá m mâ y và
DevOps. Nó trở thà nh phầ n tử điểm duy nhấ t đượ c kết hợ p trong quá trình
DevOps như mộ t mô hình triển khai trung tâ m. Nỗ lự c duy trì sự điều phố i
dịch vụ rấ t phứ c tạ p và cao. Mặ t khá c, API Web và ESP dự a trên đá m mâ y có
tiềm nă ng giả m chi phí phá t triển và linh hoạ t hơn trong việc hỗ trợ tích
hợ p bấ t khả tri doanh nghiệp tá ch rờ i.
8. Books
Một là: anh khuyên các bạn cố gắng nhận nhiều trách nhiệm hơn những gì mình đang
làm. Đừng quan tâm nhiều tới quyền lợi. Vì suy cho cùng thì mình có điều kiện phát
triển kĩ năng của mình, đó đã là lợi ích đầu tiên.
Nếu em ở level junior thì hãy cố thử nhận task của level senior. Rồi khi em làm
senior developer thì em nhận trách nhiệm design architect của một component
trong công việc của TA. Em nhận nhiều thử thách khó khăn thì kĩ năng của em sẽ tốt
hơn + có nhiều cơ hội hơn.
Hai là: nếu em làm những project dễ hoặc làm những công việc dễ dàng thì em
không thể trở thành developer có nhiều kinh nghiệm và phát triển lên để trở thành
TA giải quyết được những project yêu cầu độ phức tạp kỹ thuật cao. Do đó em
nên xin tham gia vào những project khó, yêu cầu kỹ thuật cao để rèn luyện kỹ năng.
Ba là: chọn công ty mà tại đó em có thể nhìn sản phẩm từ nhiều góc độ: UI/UX, front
end, back end, development process… Em có thể tích lũy được phần lớn những kinh
nghiệm này từ cả công ty Product và Outsourcing, nhưng công ty Product đặc biệt tốt
hơn trong việc giúp em quan sát + hiểu toàn bộ development process.
Tham khảo: 3 điểm khác biệt giữa công ty product và công ty outsourcing
Bốn là: cập nhật thông tin công nghệ, kỹ thuật mới bằng cách đọc sách, xem blog và
áp dụng vào công việc hàng ngày của mình.
Có một số sách anh đã từng đọc và đánh giá nó như là bước khởi đầu cho việc học
thiết kế phần mềm và viết code chất lượng cao.
Các cuốn sách dưới đây có thể được áp dụng cho hầu hết mọi ngôn ngữ lập trình.
Design Patterns: Elements of Reusable Object-Oriented
Software. Nhiều kinh nghiệm về object-oriented software của 4
designer hàng đầu được tập hợp tại đây với những giải pháp đơn
giản, gọn gàng cho nhiều vấn đề design thông thường. Quyển
này viết cách đây 20 năm, nhưng đến bây giờ đọc vẫn tốt vì kiến
thức architect thường là giữ nguyên/thay đổi rất ít theo thời
gian.
Patterns and Best Practices for Enterprise Integration . Quyển
sách cung cấp 1 catalog gồm 65 patterns giá trị với các solution
thực tế mô tả khả năng của messaging và giúp bạn thiết kế
messaging solution hiệu quả cho doanh nghiệp của bạn.
Growing Object-Oriented Software, Guided by Tests . Qua nhiều
ví dụ, bạn sẽ học được cách TDD hoạt động ở nhiều mức độ, sử
dụng test để drive features, học về cấu trúc object-oriented của
code, và cách sử dụng Mock Objects để miêu tả mối quan hệ
giữa các đối tượng.
Agile Software Development, Principles, Patterns and practices :
Quyển sách cơ bản và nâng cao về những nguyên tắc thiết kế
phần mềm hướng đối tượng cần thiết cho software developer và
architect. Tác giả diễn giải rất cụ thể các nguyên tắc lập trình
hướng đối tượng với rất nhiều ví dụ. Kết hợp giữa quyển sách
này và [1] Design Patterns: Elements of Reusable Object
Oriented Software là bước đầu giúp em học cách thiết kế những
phần mềm lớn.
Ngoài ra, anh cũng khuyên các bạn nên tìm hiểu các nguồn thông tin này hàng ngày:
1. InfoQ
2. DZone
3. Martin Flower