Cách tốt nhất để thực hiện chuyển đổi dự phòng ngoại tuyến của máy khách dựa trên máy tính để bàn sử dụng dịch vụ web là gì?


13

Tôi có ba dự án đến có chung một vấn đề:

họ cần có logic trên hệ thống web và họ cần một ứng dụng cục bộ (ví dụ: điểm bán hàng) giao tiếp với hệ thống đó thông qua dịch vụ web RESTful.

Giải pháp của tôi

Giải pháp tôi quản lý để đưa ra là thực hiện trong hàng đợi ứng dụng máy tính để xếp hàng để lưu trữ các hoạt động trong khi dịch vụ ngoại tuyến, chính xác hơn là xếp hàng tin nhắn không đồng bộ . Tuy nhiên, đó là phần dễ dàng (nếu đó là giải pháp tốt nhất). Tôi cũng quan tâm đến việc đồng bộ hóa dữ liệu và giải quyết xung đột.

Hệ thống chính cần phải dựa trên web vì một ứng dụng web được yêu cầu cho các báo cáo và giám sát của các bên liên quan và các dịch vụ web sẽ xử lý các yêu cầu cho một số cơ sở.

Các máy khách để bàn (tốt nhất là mỏng) sẽ được triển khai với Java (cụ thể hơn là Netbeans) và hệ thống web với Symfony2. Hai trong số các dự án yêu cầu tích hợp phần cứng cho máy khách, do đó, làm cho ứng dụng máy tính để bàn bằng công nghệ web (ví dụ Appcelerator Titanium) có thể là một nỗi đau lớn.

Câu hỏi của tôi

  1. Giải pháp tốt hơn có thể chia tỷ lệ, nghĩa là hiệu quả tối đa với nỗ lực tối thiểu (và tốt nhất là không có chi phí bổ sung, như mua một máy chủ dự phòng cho hoạt động cục bộ)?

  2. Ai khác đã giải quyết điều này trước đây? Làm thế nào bạn giải quyết vấn đề của bạn? Những bài học bạn có thể chia sẻ?

  3. Làm thế nào bạn đối phó với đồng bộ hóa?

Chỉnh sửa: Đã thêm một phần còn thiếu vào câu hỏi của tôi ở điểm # 3

Câu trả lời:


3

Tôi biết câu hỏi của bạn là java, nhưng tôi thực sự thích này thông điệp kiến trúc theo phong cách xe buýt cho loại điều.

Về cơ bản khi tin nhắn được gửi, họ nhận được hai phản hồi. Đầu tiên là từ bộ đệm cục bộ, thứ hai đến từ máy chủ khi nó được kết nối.

Tôi khá chắc chắn rằng bạn có thể điều chỉnh kiến ​​trúc này (xe buýt tê giác và nhib) với kiến ​​trúc của bạn (MQ và hib) khá dễ dàng.


Phải, tôi đang tìm kiếm chính xác loại kiến ​​trúc hướng thông điệp đó. Các đối số bộ đệm và câu cuối cùng trong liên kết của bạn đã thuyết phục tôi.
dukeofgaming

10

Làm mọi thứ cục bộ , và đồng bộ hóa định kỳ .

Đây là những gì tôi sẽ làm nếu tôi là bạn (Tôi không biết về khung đồng bộ hóa trong Java như chúng ta có trong .NET).

Duy trì dấu thời gian trong ứng dụng cục bộ sẽ giữ lần cuối bạn kết nối thành công.

Bất kể thời gian bạn kết nối lại, dấu thời gian đó sẽ được sử dụng để lấy dữ liệu mới, sau đó gửi đơn đặt hàng mới được tạo cục bộ.

Sau đó, bạn sẽ duy trì hai dấu thời gian. Một để xác định khi nào đơn hàng đã được tạo (cục bộ hoặc trực tuyến) và một khi đơn hàng đã được máy chủ ghi lại.

Tôi không khuyên bạn nên xếp hàng tin nhắn cho điều đó. Tôi đã sử dụng MQ trong quá khứ cho một trang web thương mại điện tử phải được kết nối với Navision. Mọi thứ được vận hành trong Navision và các thay đổi được gửi đến trang web thương mại điện tử thông qua MQ, bao gồm trạng thái đơn hàng và mọi thứ bao gồm mô tả sản phẩm, giá cả, v.v. Các đơn đặt hàng mới cũng được gửi đến Navision thông qua MQ.


Hmmm, tôi thích ý tưởng về mô hình đẩy, tuy nhiên tôi thấy vấn đề là nếu thời gian máy tính bị thay đổi thì có thể bị mất dữ liệu. BTW, tôi có quy ước để từng bản ghi được đánh dấu thời gian trong các thiết kế cơ sở dữ liệu của tôi. Tại sao bạn không đề xuất MQ?
dukeofgaming

Đúng vậy, bạn phải sử dụng PC và UTC được đồng bộ hóa thời gian, nhưng giờ đây nó khá chuẩn (ít nhất là trên Windows). MQ đôi khi là cần thiết, nhưng tôi nghĩ nó sẽ là quá nhiều cho loại ứng dụng bạn đang phát triển.

Ok, vì vậy, để ưu tiên độ tin cậy, tốt hơn là nghĩ rằng ứng dụng máy tính để bàn sẽ bị ngắt kết nối và do đó tốt hơn là coi ứng dụng máy tính để bàn là công dân hạng nhất, tuy nhiên, tôi vẫn có ấn tượng rằng MQ sẽ là một sự thay thế dễ dàng hơn cho việc thực hiện cơ sở dữ liệu cục bộ. Ngoài ra, tôi nghĩ rằng làm cho tất cả các hoạt động CRUD trong máy chủ hoàn toàn có bảo mật tốt hơn. Bạn nghĩ gì về hai điểm này?
dukeofgaming

@dukeofgaming: trong trường hợp của tôi, các đơn đặt hàng có thể được lấy từ bất kỳ POS nào (cũng có thể sử dụng ứng dụng này làm hệ thống nhận đơn đặt hàng chứ không phải hệ thống xử lý đơn hàng), bao gồm cả web. Tất cả mọi thứ đã được phân phối trên toàn quốc. Nó là hoàn toàn cần thiết cho mọi máy tính để bàn được tự chủ trong trường hợp ngắt kết nối. MQ cũng sẽ hoạt động trong kịch bản đó, vì vậy tôi không chống lại nó. Tôi chỉ cảm thấy dễ dàng hơn để thực hiện đồng bộ hóa dữ liệu mạnh mẽ giữa máy chủ và máy khách. Do đó, hoạt động CRUD trên máy chủ chính không phải là một tùy chọn.

2
+1 - đây là cách tôi đã thấy nó được thực hiện trong quá khứ. Tôi cũng sẽ nói rằng việc sử dụng định danh duy nhất (Hướng dẫn) làm khóa chính giúp đơn giản hóa mọi thứ vô cùng. Làm điều đó là một trong những điều thực sự làm cho cuộc sống của bạn dễ dàng hơn nếu bạn cần đồng bộ hóa.
Scott Whitlock

1

Hoặc bạn nên xem xét các triển khai cơ sở dữ liệu hệ thống được kết nối đôi khi thực hiện công việc đồng bộ hóa các máy khách từ xa với máy chủ. (SQL Server có điều này với SQL CE ở một mức độ nào đó, Outlook thực hiện điều này).

Bằng cách này, bạn có thể thực hiện tất cả các thay đổi cục bộ trong cơ sở dữ liệu dấu chân nhỏ (Nó duy trì các dấu thời gian phiên bản / logic, v.v. để bạn không phải lo lắng về đồng hồ PC, v.v.) và bất cứ khi nào bạn lên mạng, bạn đồng bộ hóa nó với chính người phục vụ.

Tôi sẽ không tìm kiếm giải pháp REST khi hệ thống không thể trực tuyến hầu hết thời gian.


Bạn đang mô tả một cơ sở dữ liệu phân tán?, Bạn có thể giải thích về điều đó không?
dukeofgaming

Không - đây không phải là một db phân tán theo nghĩa thế giới thực. Một db phân tán thường hy vọng hầu hết mọi thứ đều trực tuyến, nhưng logic nhân rộng giữa các đồng nghiệp đã bị áp dụng ở đây. Có một số cơ sở dữ liệu máy tính để bàn / thiết bị có cơ sở để thực hiện công việc sao chép ( blog.msdn.com/b/stevelasker/archive 2007/03/18 / Khăn ) - Vì vậy, tất cả những gì bạn phải làm là thiết lập db thiết bị này, ghi lại các thay đổi của bạn tại đây và khi bạn kết nối với mạng máy tính, gọi đồng bộ hóa - và điều đó sẽ thực hiện chuyển dữ liệu đến máy chủ chính cho bạn.
Subu Sankara Subramanian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.