JavaScript đồng bộ và không đồng bộ

Lập trình không đồng bộ và đồng bộ là các mô hình lập trình rất quan trọng để thiết kế và thực thi phần mềm. Trong bài đăng trên blog này, chúng ta sẽ khám phá sâu hơn hai thuật ngữ này để làm rõ khi nào bạn nên sử dụng các quy trình không đồng bộ hoặc đồng bộ hóa khi tạo ứng dụng. Để giúp tôi thực hiện nhiệm vụ này, trong phần thứ hai của bài viết này, tôi sẽ thiết kế một hệ thống tuân theo các nguyên tắc lập trình không đồng bộ bằng nền tảng mã thấp. Tuy nhiên, nếu bạn không quan tâm đến mã thấp, thì đừng bỏ chạy;

Mục lục


Sự khác biệt giữa Không đồng bộ so với. Đồng bộ?

Trước khi chúng ta chuyển sang nội dung thú vị, hãy bắt đầu bằng cách xác định sự khác biệt giữa lập trình không đồng bộ và đồng bộ

Lập trình đồng bộ là gì?

Trong hoạt động đồng bộ, các tác vụ được thực hiện lần lượt và chỉ khi hoàn thành một tác vụ, tác vụ sau mới được bỏ chặn. Nói cách khác, bạn cần đợi một nhiệm vụ hoàn thành để chuyển sang nhiệm vụ tiếp theo

Lập trình không đồng bộ là gì?

Mặt khác, trong các hoạt động không đồng bộ, bạn có thể chuyển sang tác vụ khác trước khi tác vụ trước kết thúc. Bằng cách này, với lập trình không đồng bộ, bạn có thể xử lý đồng thời nhiều yêu cầu, do đó hoàn thành nhiều tác vụ hơn trong khoảng thời gian ngắn hơn nhiều

Lập trình không đồng bộ thường liên quan đến song song hóa, nghệ thuật thực hiện song song các tác vụ độc lập, đạt được bằng cách sử dụng - bạn đoán nó - lập trình không đồng bộ

Với tính năng song song hóa, bạn có thể chia nhỏ những gì thường được xử lý tuần tự, nghĩa là chia thành các phần nhỏ hơn để có thể chạy độc lập và đồng thời. Song song hóa không chỉ liên quan đến quy trình và khả năng mà còn liên quan đến cách thiết kế hệ thống và phần mềm

Ưu điểm lớn nhất của việc áp dụng các nguyên tắc song song hóa là bạn có thể đạt được kết quả nhanh hơn nhiều và nó giúp hệ thống của bạn dễ dàng phát triển hơn và linh hoạt hơn trước thất bại

Vì vậy, bạn có nên chọn lập trình không đồng bộ thay vì đồng bộ không?

Trong một từ. không. Mặc dù có rất nhiều lợi ích, nhưng không phải tất cả các quy trình đều tuân theo các nguyên tắc song song hóa và thực thi không đồng bộ. Hãy cùng khám phá khi nào bạn nên áp dụng lập trình bất đồng bộ và khi nào thì thực thi đồng bộ là lựa chọn tốt nhất

Khi nào nên sử dụng Không đồng bộ so với. Lập trình đồng bộ?

Bạn chỉ nên sử dụng lập trình không đồng bộ nếu bạn đang xử lý các tác vụ độc lập

Khi thiết kế một hệ thống, dưới đây là một số cân nhắc bạn cần phải xác định mô hình lập trình nào bạn nên sử dụng

  • 1. Xác định sự phụ thuộc giữa các quá trình
  • 2. Xác định những gì bạn có thể thực hiện độc lập
  • 3. Xác định cái nào cần được thực thi do kết quả của các quy trình khác

Hãy nhìn vào hình ảnh dưới đây. Ở trên cùng, bạn có thể thấy rằng trong quá trình thực thi đồng bộ, các tác vụ được thực hiện theo cách tuần tự;

Không đồng bộ so với. đồng bộ

Bây giờ, hãy tưởng tượng rằng bạn đã kết luận rằng khách hàng không phụ thuộc vào sản phẩm và ngược lại, nhưng để thực hiện đơn đặt hàng, trước tiên bạn cần có thông tin từ sản phẩm—bạn có thông tin đó, một sự phụ thuộc. Trong trường hợp đó, hai nhiệm vụ đầu tiên có thể được thực hiện không đồng bộ, nhưng các đơn đặt hàng chỉ có thể được thực hiện khi sản phẩm được hoàn thành—vì vậy, chúng cần phải hoạt động đồng bộ

Kết quả là, bằng cách áp dụng tính toán song song và lập trình không đồng bộ khi xử lý các tác vụ độc lập, bạn có thể thực hiện các tác vụ này nhanh hơn so với thực thi đồng bộ vì chúng được thực thi cùng một lúc. Do đó, hệ thống của bạn giải phóng các tài nguyên có giá trị sớm hơn và sẵn sàng thực hiện các quy trình khác xếp hàng nhanh hơn

Làm thế nào để thiết kế một hệ thống chạy không đồng bộ?

Việc thiết kế một hệ thống tuân theo các nguyên tắc lập trình không đồng bộ có thể khá phức tạp, vì vậy tôi sẽ chỉ cho bạn cách thực hiện bằng cách sử dụng một cổng xử lý khiếu nại điển hình. Một cái gì đó như thế này

 

Tại đây, chúng tôi có cổng thông tin mà các chủ hợp đồng và các thực thể khác sử dụng để chèn và quản lý thông tin khiếu nại. Cổng thông tin này giao tiếp với hệ thống xác thực khiếu nại thông qua API

Xem xét chi tiết hơn, hệ thống xác thực nhập dữ liệu vào một công cụ xác thực kinh doanh bao gồm nhà môi giới và quy tắc kinh doanh có quy trình và logic không thể tin được đối với các hệ thống bên ngoài. Sau đó, hệ thống này tích hợp với các kênh thanh toán để xuất kết quả xác thực doanh nghiệp.

Như tôi đã nói ở phần đầu, tôi sẽ giải thích cách thiết kế hệ thống này để chạy không đồng bộ bằng cách sử dụng nền tảng mã thấp—OutSystems. Nếu bạn không phải là nhà phát triển hoặc kiến ​​trúc sư của OutSystems, bạn vẫn có thể sử dụng bản trình diễn này để tự động hóa các quy trình không đồng bộ song song với công nghệ ưa thích của mình

Trước khi chúng ta nhúng tay vào—tôi hứa, chúng ta sắp hoàn thành—vì tôi đang sử dụng OutSystems, tôi cần làm rõ một số thuật ngữ và khả năng mà tôi sẽ sử dụng. Nếu bạn đã quen thuộc với chúng hoặc bạn chỉ muốn xem kiến ​​trúc được đề xuất để cải thiện hiệu quả của cổng khiếu nại này, bạn có thể bỏ qua phần

 

Tự động hóa các quy trình không đồng bộ của Cổng xử lý khiếu nại. Kiến trúc đề xuất

Hãy phóng to hệ thống xác thực khiếu nại

 

API sẽ chèn từng xác nhận quyền sở hữu vào dữ liệu phân tầng. Sau đó, một bộ đếm thời gian, đã được lên lịch, sẽ xem xét các yêu cầu đó. Lưu ý rằng mỗi yêu cầu là một cấu trúc có thể có nhiều bản ghi bên trong. Vì vậy, bộ đếm thời gian sẽ xác thực và phân tách các xác nhận quyền sở hữu và bản ghi đó, đồng thời thực hiện Chèn hàng loạt vào các thực thể kinh doanh cho các xác nhận quyền sở hữu

Bây giờ, chúng tôi muốn có thể tối ưu hóa tài nguyên của mình nhiều nhất có thể. Vì lý do đó, chúng tôi sẽ không xử lý từng bản ghi ngay khi chúng được chèn vào bảng. Chúng tôi cũng muốn loại bỏ chi phí hoạt động khi bắt đầu quy trình xác thực, vì vậy chúng tôi sẽ sử dụng điều khiển bộ chứa, về cơ bản là một bản ghi mà bạn sẽ chỉ định đâu là bản ghi đầu tiên và đâu là bản ghi kết thúc. Vì vậy, nhóm này về cơ bản là một khoảng các bản ghi và xác nhận quyền sở hữu sẽ được xử lý

Cùng với đó, đối với mỗi bản ghi nhóm, chúng tôi sẽ kích hoạt một quy trình nhẹ sẽ xử lý từng bản ghi bên trong nhóm. Bằng cách xử lý, tôi có nghĩa là áp dụng các quy tắc. Các quy tắc này là các công cụ có thể được cắm và chạy, vì vậy chúng có thể được thêm vào hệ thống trong thời gian chạy

Sau khi một bản ghi được xử lý, nếu nó được coi là hợp lệ theo quy tắc kinh doanh, thì nó sẽ được đặt như vậy và bộ hẹn giờ sẽ tổng hợp dữ liệu và gửi nó đến kênh tương ứng

Điều đó nói rằng, đây là kiến ​​trúc đề xuất của chúng tôi

 

Đầu tiên, API xác nhận quyền sở hữu sẽ thu thập tất cả dữ liệu được nhập thông qua cấu trúc JSON hoặc XML. Mỗi dữ liệu sau đó được chèn vào thực thể dàn. Mục tiêu ở đây là tăng tốc độ chèn dữ liệu và tránh mất dữ liệu

Sau khi dữ liệu được chèn vào, bộ hẹn giờ sẽ được khởi chạy theo lịch trình. Mục đích của bộ đếm thời gian này là phân tách xác nhận quyền sở hữu dựa trên Quy tắc xác nhận quyền sở hữu được xác định trước và thực hiện Chèn hàng loạt. Dựa trên các quy tắc đó, yêu cầu bồi thường sẽ được đưa vào Dịch vụ yêu cầu bồi thường

Số bản ghi bên trong mỗi tệp lớn là số bản ghi bạn có thể xử lý trong giới hạn ba phút. Tại thời điểm này, bạn nên tránh khả năng có sẵn song song và chỉ chạy một quy trình nhẹ tại một thời điểm vì bạn đang chỉ định một nhóm có số lượng lớn yêu cầu bên trong

Sau khi điều khiển bộ chứa được tạo, quy trình ánh sáng sẽ được kích hoạt

 

Và kích hoạt sẽ thực hiện quá trình

 

Vì vậy, Công cụ môi giới xác nhận quyền sở hữu sẽ nhận các quy tắc đã được xác định trước trong Quy tắc xác nhận quyền sở hữu và, dựa trên cấu hình, các điểm cuối của công cụ quy tắc—về cơ bản là các API REST vì chúng tôi muốn có thể cắm và chạy các công cụ quy tắc trong

Khi chúng tôi nhận được tất cả các công cụ quy tắc mà chúng tôi cần để thực thi loại cụ thể đó và có các điểm cuối cho chúng, bây giờ chúng tôi sẽ gọi chúng theo trình tự. Vì vậy, chúng tôi sẽ áp dụng các quy tắc đó trên dữ liệu xác nhận quyền sở hữu

 

Theo kết quả của mỗi quy tắc, một khiếu nại sẽ được coi là "hợp lệ" và do đó chuyển sang bước tiếp theo hoặc "không hợp lệ" và trong trường hợp đó, bị hệ thống từ chối

Cuối cùng, hệ thống sẽ có một bộ đếm thời gian dựa trên mức độ ưu tiên sẽ nhận tất cả các yêu cầu hợp lệ, tổng hợp chúng và gửi chúng đến các kênh thanh toán

 

Bạn cũng có thể làm cho các quy tắc ưu tiên phức tạp hơn. Ví dụ: bạn có thể muốn xác định rằng một số khiếu nại nhất định sẽ được gửi càng sớm càng tốt, vì vậy chúng cần được gửi ngay sau khi chúng được hệ thống xác thực và sẵn sàng để được thanh toán;

Một lợi ích khác của việc sử dụng loại quy tắc từng bước này trong công cụ là hệ thống cũng có thể khôi phục sau thời gian chờ hoặc thậm chí là sự cố. Hãy tưởng tượng rằng sau khi xử lý quy tắc một nhưng trước khi thực hiện quy tắc hai, sẽ có thời gian chờ hoặc lỗi nghiêm trọng trong quy trình và hệ thống cần khôi phục từ đó. Với hệ thống này, mỗi xác nhận quyền sở hữu đều có sẵn để khôi phục từ điểm chính xác trước khi xảy ra sự cố. Vì vậy, trong trường hợp này, xác nhận quyền sở hữu sẽ khôi phục và thực thi quy tắc hai thay vì lặp lại quy tắc một

Chìa khóa rút ra

Tôi hy vọng bài viết này sẽ giúp bạn làm sáng tỏ bất kỳ câu hỏi nào mà bạn có thể có về việc khi nào bạn nên sử dụng lập trình bất đồng bộ hoặc đồng bộ. Tóm lại, đây là những điểm chính

  • Sử dụng các kỹ thuật không đồng bộ phù hợp hơn với kết quả
  • Thay đổi cấu hình và máy chủ ngoại vi để phù hợp với nhu cầu của bạn. Hãy nhớ rằng khi truy cập vào hàng triệu bản ghi, bạn cần nhiều máy chủ ngoại vi hơn để đáp ứng nhu cầu của mình
  • Thiết kế với tính linh hoạt và tránh các giá trị hoặc thuộc tính trang web được mã hóa cứng. Hãy tưởng tượng bạn sử dụng các giá trị được mã hóa cứng để kiểm soát nhóm; . Bây giờ bạn đang ở trong một tình huống thậm chí còn tồi tệ hơn, bởi vì bạn cần xuất bản các thay đổi và không phải vào văn phòng hỗ trợ để thay đổi nó
  • Đừng quá kỹ sư. Cố gắng giữ kiến ​​trúc và hệ thống của bạn càng đơn giản càng tốt

Nếu bạn muốn xem kịch bản này đang hoạt động, hãy xem TechTalk gần đây của tôi, Cách sử dụng các kỹ thuật không đồng bộ trong OutSystems. Ở đó, tôi sẽ chỉ cho bạn giải pháp được đề xuất ở đây trong khi tận dụng các khả năng không đồng bộ của OutSystems, thúc đẩy khả năng mở rộng và khả năng phục hồi trước sự cố và sẵn sàng xử lý khối lượng dữ liệu lớn

JavaScript là đồng bộ hay không đồng bộ?

JavaScript là đồng bộ . về cơ bản, JavaScript là một ngôn ngữ đơn luồng, chặn, đồng bộ. Điều đó chỉ có nghĩa là tại một thời điểm chỉ có một hoạt động có thể được tiến hành. Đó không phải là toàn bộ câu chuyện, mặc dù

JavaScript không đồng bộ là gì?

Lập trình không đồng bộ là một kỹ thuật cho phép chương trình của bạn bắt đầu một tác vụ có khả năng chạy dài và vẫn có thể phản hồi các sự kiện khác trong khi tác vụ đó chạy, thay vì phải đợi cho đến khi tác vụ đó kết thúc. Khi nhiệm vụ đó đã hoàn thành, chương trình của bạn sẽ hiển thị kết quả

TypeScript đồng bộ hay không đồng bộ?

TypeScript hiện hỗ trợ các chức năng không đồng bộ cho các công cụ có hỗ trợ riêng cho trình tạo ES6, e. g. Nút v4 trở lên.

http là đồng bộ hay không đồng bộ?

HTTP là một giao thức đồng bộ . khách hàng đưa ra yêu cầu và chờ phản hồi.

Chủ Đề