Chương 1: Giới thiệu về đê tai cũng như nêu lên vân đê, hiện trạng vê thông tin của các loài thực vật trên Internet. Tiép đó, trình bày mục tiêu và phạm vi tiép cận của đê tài. Cuôi cùng là phân các nghiên cứu liên quan đên thực vật và câu trúc của luận văn. e_ Chương 2: Trình bày các kiến thức nền tảng và công nghệ áp dụng của nhóm cho luận án.
e_ Chương 3: Trình bay cách thiết kế ứng dụng, thiết kế hệ thống Microservices đi kèm với cơ sở dữ liệu và giao diện của luận án. e Chương 4: Trình bày kết qua đạt được, những thuận lợi khó khăn và hướng phát triển cho đề tài này. CÔNG NGHỆ Trong phần này nhóm sẽ trình bày chỉ tiết những kiến thức nền tảng và công nghệ áp dụng được sử dụng dé thực hiện dé tài khóa luận này 2. Kiến thức nền tảng 2.
Docker Docker là nền tang mã nguồn mở chạy các ứng dung va làm cho quá trình phat triển, phân phối dễ dàng hơn. Các ứng dụng được tích hợp trong docker được đóng gói với tất cả các phụ thuộc hỗ trợ vào container. Những container này chạy trong nhân của hệ điều hành [2]. Hay nói một cách khác Docker là một nền tảng dé cung cấp cách dé building, deploy và run các ứng dụng một cách dé dàng trên nền tang ảo hóa - "Build once, run anywhere".
Ung dung Docker chạy trong vùng chứa (container) có thể được sử dụng trên bat kỳ hệ thống nào: máy tính xách tay của nhà phát triên, hệ thống trên cơ sở hoặc trong hệ thống đám mây. Và là một công cụ tạo môi trường được "đóng gói" (còn gọi là Container) trên máy tính mà không làm tác động tới môi trường hiện tại của máy, môi trường trong Docker sẽ chạy độc lập. Docker có thê làm việc trên nhiêu nên tảng như Linux, Microsoft Windows va Apple OS X. Các tiện ích khi sử dụng docker: o_ Dễ dàng sử dụng: Docker rất dễ cho mọi người sử dụng từ developers, systems admins, architects,.
nó tận dụng lợi thế của container dé build, test nhanh chóng. o Tốc độ: Docker container rất nhẹ và nhanh, có thé tạo và chạy docker container trong vài giây. o Khả năng di động: Có thể chuyên từ người này sang người khác mà không làm thay đôi cau hình ở trong. o_ Môi trường chạy và khả năng mở rộng: Có thể chia nhỏ những chức năng của ứng dụng thành các container riêng lẻ 2.
Microservices Microservice Architecture Microservice Microservice Hình 2.2: Ví dụ vê kiên trúc microservice Microservices là các thành phần độc lập được triển khai tách biệt về mặt khái niệm và được trang bị các công cụ duy trì bộ nhớ chuyên dụng (database) [3]. Microservice là một kiếu kiến trúc phần mềm. Các module trong phan mềm này được chia thành các service rất nhỏ (microservice). Mỗi service này đều có một logic riêng, một trách nhiệm riêng và có thể được deploy riêng biệt.
Khái niệm mircoservice đồng thời đề cập đến xu hướng tách biệt architecture ra thành các loose coupling service, tức là các service này sẽ có một mối liên hệ "lỏng lẻo" với nhau và môi service sẽ được nam trong | context nhât định. Đặc điêm của Microservice: o Tập hợp một nhóm nhỏ các service: mức độ chi tiết của một service là nhỏ và mỗi service này sẽ chịu một trách nhiệm cụ thé (single responsiblity) va chỉ tập trung vào nhiệm vụ đó o Việc phát triển và mở rộng một service là hoàn toàn độc lập. Điều này mang lại tính linh hoạt cho hệ thống. Quá trình deliver feature, release version sẽ dễ dàng và nhanh chóng.
o_ Giảm tải được các mối quan ngại về công nghệ sử dụng. Chọn một công nghệ phù hợp với van dé của doanh nghiệp có thê được giải quyết dé dàng. Các service giao tiếp với nhau thông qua API, do vậy mỗi service có thể dùng một ngôn ngữ riêng biệt. Serivce A dùng Java, Service B dùng Javascript.
o_ Đối với team, microservice đem lại tính độc lập và tự quản lí cho team. Một team sẽ có trách nhiệm toàn bộ với life-cycle của một hay nhiều service. Họ làm việc trong việc context biệt lap, có thé tự quản lí các quyết định của mình. Ưu diém của Microservice: o Dê nâng cap va scale, đây là điêu quan trọng nhat.
Giả sử với một trang web bán hàng cân xuât nhiêu hóa đơn, chỉ việc nâng câp server cho service order và report. Việc nâng cap server với mô hình microservice rat dé dàng thực hiện. Do tách biệt nên nếu một service bị lỗi, toàn bộ hệ thống vẫn hoạt động bình thường. Với monolith, một module bị lỗi có thể sẽ kéo theo toàn bộ hệ thống bị sập.
Các service khác nhau có thé sử dụng các ngôn ngữ khác nhau, database khác nhau. Khả năng testing dé dàng hon - các services nhỏ hơn và nhanh hơn dé test. Cải thiện khả năng bảo trì - mỗi service tương đối nhỏ do đó dé hiểu và thay đổi hơn. Dễ dàng hơn trong việc tích hợp 3rd-party.
Mỗi service có dung lượng lưu trữ riêng và có thê có cơ sở dữ liệu riêng. Công nghệ áp dụng 2.js 10 NodeJS là nền tang lập trình phía máy chủ mã nguồn mở và đa nền tảng được xây dựng trên môi trường thời gian chạy JavaScript V8 của Google Chrome chạy JavaScript bên ngoài trình duyệt [4].js được xây dựng và phát triển từ năm 2009, bảo trợ bởi công ty Joyent, trụ sở lại California Hoa kì. Phần Core bên dưới của Node,Js được viết hầu hết bang C++ nên cho tốc độ xử lý dữ liệu và hiệu năng khá cao Node.js tạo ra được các ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực.js áp dụng cho các sản phâm có lượng truy cập lớn, cần mở rộng nhanh, cân đôi mới công nghệ hoặc tạo ra các dự án startup nhanh nhất có thê.js cung cấp một thư viện phong phú các module JavaScript khác nhau giúp đơn giản hóa sự phát trién của các ứng dụng web bằng cách sử dung Node.js ở một mức độ lớn. TypeScript TypeScript vừa là một ngôn ngữ lập trình, vừa là một bộ công cu dé biên dịch ra JavaScript.
Nó được thiết kế bởi Anders Hegsbers ở Microsoft (nhà thiết kế của C#) [5]. TypeScript là một phiên bản cao hơn của JavaScript, được thiết kế dé xây dựng các ứng dụng lớn va phức tạp. Kế thừa khái niệm từ Java và C#, TypeScript là ngôn ngữ tĩnh (static typed) có nghĩa là nó nghiêm ngặt và có trật tự trái ngược với free-type. TypeScript còn được bô sung thêm lớp hướng đối tượng mà điều này không có ở Javascript.
11 Ưu điểm của TypeScript: o Dé dàng hơn trong phat triển các dự án lớn, được hỗ trợ bởi các Javascript Framework lón. o Hau hết các cú pháp hướng đối tượng đều được hỗ tro bởi Typescript như kế thừa, đóng gói, constructor, abstract, interface, implement, override.v o Cách tổ chức code rõ ràng hơn, hỗ trợ cơ chế giúp kiến trúc hệ thống code hướng module, hỗ trợ namespace, giúp xây dựng các hệ thống lớn nơi mà nhiều lập trình viên có thé làm việc cùng nhau một cách dé dàng hơn. o Hỗ trợ các tính năng mới nhất của Javascript. TypeScript luôn đảm bao việc sử dụng đầy đủ các kỹ thuật mới nhất của Javascript, ví dụ như version hiện tai là ECMAScript 2015 (ES6).
o_ Một lợi thế của Typescript nữa là mã nguồn mở vì vậy nó miễn phí và có cộng đồng hỗ trợ rất lớn. o Với static typing, code viết bằng TypeScript dé dự đoán hơn, và dễ debug hơn. => Đang được sử dụng ở các framework phô biến như Angular, Node. NestJS NestJS là một NodeJS framework dùng dé phát triển server-side applications hiệu qua và có thé mở rộng.
NestJS là sự kết hop bởi OOP (Object Oriented Programming), FP (Functional Programming), FRP (Functional Reactive Programming) [6]. NestJS sử dụng TypeScript dé phát triển nhưng nó cũng hỗ trợ ca Javascript. Design Pattern xuyên suốt NestJS là Dependency Injection, và cú pháp của NestJS rất giống Angular. Nên nếu đã có kiến thức về Angular thì việc bat đầu với NesJS sẽ khá dễ dàng.
NesJS có rất nhiều module hỗ trợ, từ việc hot reload, logger cho đến GraphQL, Websocket rồi cqrs pattern, microservices,. Module microservicescủa NesjlS ho trợ đủ loạ kêt nôi: RabbitMQ, gRPC, Kafka, Redis, Nats. và infrastructure thì NestJS đã implement san chi việc dùng. 13 NestJS đã đã implement sẵn infrastructure.
TypeORM {= TYPEORTM Hinh 2.5: TypeORM TypeORM là một ORM có thể chạy trên các nền tảng NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo va Electron và con dùng được với TypeScript và JavaScript (ES5, ES6, ES7, ES8). Công cụ ra đời nhằm hỗ trợ các tinh năng JavaScript mới nhất, và cung cấp các tinh năng bé sung giúp bạn phát triển ứng dụng tích hop cơ sở dit liệu — từ các ứng dụng nhỏ với chỉ vai table đến các ứng dụng doanh nghiệp quy mô lớn có nhiều cơ sở dit liệu [7]. TypeORM hỗ trợ cả pattern Active Record và Data Mapper, khác với tất cả các ORM JavaScript hiện có, với TypeORM bạn có thé viết các ứng dụng high quality, loosely coupled, scalable và maintainable thật hiệu quả nhất. Các tính năng của TypeORM: o Entities và Collums o Entity manager o Associations o Inheritance patterns 14 o Connection pooling o Left and inner joins o Query caching o Tuân theo hầu hết các best practice 2.
Mongoose mongoose elegant mongodb object modeling for node.6: Mongoose Mongoose là một Object Document Mapper (ODM). Điều này có nghĩa là Mongoose cho phép định nghĩa các object (đối tượng) với một schema được định nghĩa rõ ràng, được ánh xạ tới một MongoDB document. Mongoose cung cấp một giải pháp dựa trên giản đồ đơn giản dé lập mô hình dữ liệu ứng dụng của bạn. Nó bao gồm đúc kiểu tích hợp, xác thực, xây dựng truy van, móc logic nghiệp vụ ngay lập tức và hon thé nữa [8].
Mongoose cung câp một sô lượng đáng kinh ngạc các chức năng cho việc tạo ra và làm việc với các schema. Mongoose hiện có 8 SchemaTypes. Đó là: o String o Number o Date o Buffer o Boolean 15 o Mixed o ObjectId o Array Mỗi loại dữ liệu cho phép xác định: o Giá trị mặc định o Hàm xác thực o_ Cho biết một trường bắt buộc o Hàm get cho phép thao tác dữ liệu trước khi nó được tra về như một object o Ham set cho phép thao tac dữ liệu trước khi nó được lưu vào co sở dữ liệu o Tạo indexes cho phép dt liệu được nạp nhanh hơn 2.io IN|A|T|S Hình 2.io là hệ thông messaging mã nguôn mở đơn giản, an toàn và hiệu suât cao cho các ứng dụng gôc đám mây, nhăn tin IoT và kiên trúc microservices. NATS được xây dựng để đáp ứng nhu cầu tính toán phân tán.