10

Sau khi nâng cấp từ Service Fabric SDK 2.0.135 lên 2.3.301, chúng tôi đã bắt đầu gặp phải các tình huống mà dịch vụ hoặc dịch vụ Fabric Service không thể truy cập được mặc dù thể hiện sức khỏe trong Service Fabric Explorer. Khi ở trạng thái này, mọi cuộc gọi đến diễn viên hoặc dịch vụ thông qua ActorProxy hoặc ServiceProxy sẽ treo trong 5 phút trước khi cuối cùng đưa ra một TimeoutException. Khi ở trong trạng thái này, diễn viên hoặc dịch vụ không bao giờ tự phục hồi - ngay cả khi còn lại trong một giờ. Giải pháp duy nhất là đặt lại (các) nút mà tác nhân hoặc dịch vụ cư trú, triển khai lại tác nhân hoặc dịch vụ (chính xác EXE), đặt lại toàn bộ cụm hoặc khởi động lại tất cả các máy cụm.Dịch vụ diễn viên hoặc dịch vụ vải trở nên không thể tiếp cận ngẫu nhiên sau khi nâng cấp lên SDK 2.3.301

Thường đi vào trạng thái này sau khi triển khai hoặc triển khai lại ứng dụng SF.

Trong năm cuối cùng làm việc với Service Fabric (kể từ SDK v1.3), chúng tôi chưa bao giờ gặp phải vấn đề này. Nó chỉ bắt đầu sau khi chuyển sang 2.3.301.

Dường như điều này xảy ra ngẫu nhiên và không nhất quán. Trong số 13 ứng dụng SF của chúng tôi trong giải pháp của chúng tôi được thực hiện cũng là ngẫu nhiên.

Có ai có bất kỳ ý tưởng nào về cách chúng tôi có thể giải quyết vấn đề này không? Nó có vẻ giống như một lỗi trong phiên bản mới nhất của Service Fabric nhưng có lẽ chúng tôi đang làm điều gì đó sai về phía chúng tôi.

Mọi trợ giúp đều được đánh giá cao.

Dưới đây là rất nhiều thông tin bổ sung mà tôi hy vọng sẽ hữu ích trong việc hiểu những gì chúng tôi đang phải đối mặt với vấn đề này.

Rất cám ơn

bước

tôi không thực sự có bước để liên tục tạo lại vấn đề. Đây chỉ là những gì tôi quan sát đôi khi.

  1. tôi biên soạn và sau đó tái triển khai dự án SF của tôi từ Visual Studio (Debug -> Bắt đầu Without Debugging)
  2. Visual Studio cho biết họ đã triển khai thành công các dự án
  3. Dịch vụ Vải Explorer cho thấy tất cả các dịch vụ của tôi như Khỏe mạnh, bao gồm cả Dữ liệu ràng buộc
  4. Dự án SF được đề cập có 2 diễn viên là một phần của một EXE duy nhất. Service Fabric Explorer cho thấy mỗi diễn viên đang chạy trên các nút khác nhau.
  5. Trình quản lý tác vụ Windows hiển thị hai bản sao đang chạy của EXE, điều này có ý nghĩa vì có hai nút chạy EXE.

Tương tự, QA của chúng tôi gặp sự cố sau khi triển khai Azure bằng PowerShell trực tiếp. (Anh ta không triển khai từ Visual Studio.)

Để recap

  • Visual Studio cho biết việc triển khai thành công
  • Dịch vụ Vải Explorer cho thấy rằng mọi thứ đều khỏe mạnh
  • Task Manager cho thấy hai bản chạy của EXE

Khi tôi thấy lỗi

Tôi có một Dịch vụ SF gọi một Dịch vụ SF khác bằng cách sử dụng các lớp ServiceProxy hoặc ActorProxy. Chúng tôi thực hiện điều này trong suốt giải pháp của mình với sự kết hợp của 13 ứng dụng khác nhau và khoảng 25 Dịch vụ khác nhau & Diễn viên. Nó đã hoạt động thành công kể từ khi chúng tôi bắt đầu làm việc với Service Fabric SDK v1.3 trong tháng 11 năm 2015.

Bây giờ, sau khi nâng cấp lên 2.3.301, chúng tôi có sự xuất hiện định kỳ của một Diễn viên hoặc Dịch vụ ngẫu nhiên vào trạng thái không thành công để trả lời cuộc gọi đến một phương thức khi được gọi từ ServiceProxy hoặc ActorProxy. Sau 5 phút treo, chúng tôi nhận được một ngoại lệ System.Timeout với thông báo sau:

Điều này có thể xảy ra nếu thông điệp được giảm khi dịch vụ đang bận hoặc hoạt động lâu chạy hoạt động và dành thời gian nhiều hơn cấu hình của nó Timeout .

Lưu ý rằng dịch vụ KHÔNG bận, cũng như không hoạt động trong thời gian dài. Là một diễn viên, dịch vụ này không thực hiện bất kỳ hoạt động nào đang diễn ra. Nó chỉ đơn giản là phơi bày các phương thức công khai mà các dịch vụ khác có thể tiêu thụ. Nó không thành công từ cuộc gọi đầu tiên.

Thực tế, theo dõi cho chúng ta thấy rằng ngay cả dòng đầu tiên của phương pháp trong diễn viên không bao giờ được gọi là. Nó giống như cơ sở hạ tầng truyền thông của Service Fabric thất bại trong việc truyền tải thông điệp.

Khi này Started

Trong 12 tháng qua, chúng tôi chưa bao giờ nhìn thấy vấn đề này.

Hiện tại, chúng tôi đang gặp sự cố này thường xuyên và trong nhiều điều kiện khác nhau kể từ khi nâng cấp Service Fabric vào tuần trước.

Chúng tôi nâng cấp lên Service Fabric SDK 2.3.301.9590 và Dịch vụ Fabric 5.3.301.9590.

Lúc đầu, mỗi nhà phát triển trong nhóm gặp sự cố một cách độc lập và mỗi người nghĩ rằng đó là sự cố tạm thời chỉ với các máy của chúng tôi. Dịch vụ Vải có một số vấn đề vì vậy chúng tôi chỉ chấp nhận điều này và tiếp tục. Nhưng sau đó chúng tôi bắt đầu phàn nàn với nhau và nhận ra rằng tất cả chúng ta đều thấy nó. Ngay cả các QA của chúng tôi cũng đang nhìn thấy nó trên đám mây trong môi trường của chúng tôi và sẽ sớm được sản xuất.

Một lần nữa, điều này chỉ bắt đầu khi chúng tôi nâng cấp lên phiên bản Dịch vụ Vải mới nhất tuần trước.

Trước đây, chúng tôi đang chạy Service Fabric SDK 2.0.135.

Chúng tôi đã nâng cấp codebase của mình bằng cách cài đặt SDK v 2.3.301, mở mỗi giải pháp của chúng tôi và cho phép Visual Studio tiến hành nâng cấp.

Môi trường

Tôi đang chạy một tươi cài đặt của Windows 10 Enterprise (cài đặt nó trước ít hơn 2 tuần) trên một i7 với 16 biểu diễn của RAM. Tôi có một bản cài đặt mới của Visual Studio 2015 Update 3 và SF 2.3.301.9590. Tôi đã cài đặt mọi thứ sạch sẽ. Không nâng cấp.

Điều này cũng xảy ra trên tất cả các máy đồng nghiệp của tôi (ở các độ tuổi khác nhau, cấu hình và "độ tươi"). Nó xảy ra không thường xuyên với mỗi người chúng ta.

Nghiêm trọng nhất, điều này cũng xảy ra trên Máy ảo vải dịch vụ của chúng tôi trên Azure. Đây là những máy mà QA của chúng tôi đã tạo khoảng một tháng trước bằng cách sử dụng các mẫu tiêu chuẩn cho các máy ảo vải dịch vụ trên Azure. Nó đã cài đặt trước 5.3.301.9590. Ông đã không tự cài đặt bất kỳ bản cập nhật nào cho Dịch vụ Vải. Ứng dụng dựa trên SF của chúng tôi đã không gặp phải vấn đề này trên Azure (hoặc các máy dev của chúng ta) cho đến sau khi các nhà phát triển nâng cấp lên phiên bản mới.

Đây không phải là điều máy của tôi, cũng không bị cô lập chỉ với môi trường phát triển. Sự thay đổi nhất quán duy nhất cho tất cả chúng ta là bản cập nhật của phiên bản SF.

Nguyên nhân

Chúng tôi không có ý tưởng những gì gây ra nó.

Điều này thường xảy ra ngay lập tức sau khi triển khai một ứng dụng SF mới. Có, chúng tôi chờ đợi 2 hoặc 3 phút thông thường để SF tự "tìm ra" sau khi triển khai. Chúng tôi đã để nó từ một giờ trở lên và nó không bao giờ hoạt động.

Giai thoại, tôi nghĩ rằng Tôi đã có Dịch vụ SF hoạt động tốt và sau đó đột nhiên ngừng hoạt động nhưng điều này là trước khi chúng tôi nhận ra có vấn đề nên tôi không tìm kiếm. Tôi không thể chắc chắn.

Các công việc ở quanh

Một khi chúng ta có một dịch vụ SF trong trạng thái “không thể tiếp cận”, dịch vụ Vải sẽ không nhận được bản thân lại ra khỏi trạng thái đó một lần nữa. Ứng dụng hoàn toàn không sử dụng được. Với mức độ khác nhau của sự thành công, chúng ta thực hiện như sau:

  • Re-triển khai ứng dụng SF không thể tiếp cận
  • Khởi động lại các nút (thông qua Dịch vụ Vải Explorer bằng cách vào nút , nhấp vào nút dấu ba chấm và nhấn vào “ Khởi động lại”tùy chọn) rằng tổ chức dịch vụ SF không thể tiếp cận & diễn viên
  • Khởi động lại toàn bộ cụm SF (Dừng sau đó Start)
  • Khởi động lại tất cả các máy chạy một nút SF
  • Res et toàn bộ cụm và tái triển khai tất cả mọi thứ (phương sách cuối cùng nhưng nó đã cần một vài lần)

Điều thú vị là những gì không giúp được sử dụng Task Manager để giết các quá trình vi phạm. Nếu tôi giết quá trình vi phạm, Service Fabric sẽ khởi động lại nó (như mong đợi) nhưng nó vẫn không trả lời thư.

Do đó, vấn đề dường như là với bản thân Service Fabric chứ không phải với EXE.

Tất nhiên, đây không phải là "giải pháp" vì chúng không thể truy cập toàn bộ ứng dụng của chúng tôi cho đến khi SF có thể khởi động lại/trả lại. Ngay cả việc khởi động lại một vài trong số các nút cũng đánh bật một loạt các thứ ngoại tuyến.

Về bản chất, đây là nút chỉ cho chúng tôi. Chúng tôi không thể đưa ứng dụng của chúng tôi vào sản xuất (hoặc thậm chí là beta) với Service Fabric hoạt động như thế này.

C# ngoại lệ khi Sử dụng Proxy Service hoặc diễn viên Proxy:

JSON vẽ của ném ngoại lệ bởi ActorProxy hoặc ServicePRoxy

"exception": { 
    "ClassName": "System.TimeoutException", 
    "Message": "This can happen if message is dropped when service is busy or its long running operation and taking more time than configured Operation Timeout.", 
    "Data": null, 
    "InnerException": null, 
    "HelpURL": null, 
    "StackTraceString": " at Microsoft.ServiceFabric.Services.Communication.Client.ServicePartitionClient`1.<InvokeWithRetryAsync>d__7`1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.ServiceFabric.Services.Remoting.Client.ServiceRemotingPartitionClient.<InvokeAsync>d__8.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.ServiceFabric.Services.Remoting.Builder.ProxyBase.<InvokeAsync>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.ServiceFabric.Services.Remoting.Builder.ProxyBase.<ContinueWithResult>d__7`1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at RenderingCachingEngine.RenderingCachingEngine.<Render>d__10.MoveNext() in C:\\Code\\Ink\\Dev\\Current\\Source\\Rendering Service Fabric\\RenderingCachingEngine\\RenderingCachingEngine.cs:line 381", 
    "RemoteStackTraceString": null, 
    "RemoteStackIndex": 0, 
    "ExceptionMethod": "8\nMoveNext\nMicrosoft.ServiceFabric.Services, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\nMicrosoft.ServiceFabric.Services.Communication.Client.ServicePartitionClient`1+<InvokeWithRetryAsync>d__7`1\nVoid MoveNext()", 
    "HResult": -2146233083, 
    "Source": "Microsoft.ServiceFabric.Services", 
    "WatsonBuckets": null 
    } 

Đây là một render JSON của Info Service Vải:

"serviceFabricInfo": { 
    "serviceFabricServiceName": "fabric:/Rendering/RenderingCachingEngine", 
    "serviceFabricServiceTypeName": "RenderingCachingEngineType", 
    "serviceFabricReplicaId": 131225099453058851, 
    "serviceFabricPartitionId": "e400087d-8a08-4dab-bcdd-1f5ce82f374f", 
    "serviceFabricApplicationName": "fabric:/Rendering", 
    "serviceFabricApplicationTypeName": "RenderingType", 
    "serviceFabricNodeName": "_Node_4" 
    } 

Nhật ký trình xem sự kiện khi triển khai lại

Trình xem sự kiện Windows hiển thị một số nhật ký đáng ghi chú trong "Nhật ký ứng dụng và dịch vụ -> Vải dịch vụ của Microsoft -> Quản trị".

Các bản ghi sau đây xảy ra trong khi tôi đã được tái triển khai một phiên bản cập nhật của ứng dụng của tôi (lưu ý rằng DataBinding.exe là tên của EXE chứa hai diễn viên SF của tôi):

Log Name:  Microsoft-ServiceFabric/Admin 
Source:  Microsoft-ServiceFabric 
Date:   11/2/2016 2:38:53 PM 
Event ID:  256 
Task Category: Common 
Level:   Error 
Keywords:  Default 
User:   NETWORK SERVICE 
Computer:  shayward10.ovx.local 
Description: 
WriteNode failed. HRESULT=-2147467259, Output=CustomOutput 
Event Xml: 
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Microsoft-ServiceFabric" Guid="{CBD93BC2-71E5-4566-B3A7-595D8EECA6E8}" /> 
    <EventID>256</EventID> 
    <Version>0</Version> 
    <Level>2</Level> 
    <Task>1</Task> 
    <Opcode>0</Opcode> 
    <Keywords>0x8000000000000001</Keywords> 
    <TimeCreated SystemTime="2016-11-02T18:38:53.678587200Z" /> 
    <EventRecordID>7620</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="4440" ThreadID="7360" /> 
    <Channel>Microsoft-ServiceFabric/Admin</Channel> 
    <Computer>shayward10.ovx.local</Computer> 
    <Security UserID="S-1-5-20" /> 
    </System> 
    <EventData> 
    <Data Name="id"> 
    </Data> 
    <Data Name="type">XmlLiteWriter</Data> 
    <Data Name="text">WriteNode failed. HRESULT=-2147467259, Output=CustomOutput</Data> 
    </EventData> 
</Event> 

Log Name:  Microsoft-ServiceFabric/Admin 
Source:  Microsoft-ServiceFabric 
Date:   11/2/2016 2:38:54 PM 
Event ID:  23073 
Task Category: Hosting 
Level:   Warning 
Keywords:  Default 
User:   SYSTEM 
Computer:  shayward10.ovx.local 
Description: 
ServiceHostProcess: DataBinding.exe for ApplicationId 805915c7-456c-49d3-af95-62cc44650664 terminated unexpectedly with exit code 3221225786 on node id bf865279ba277deb864a976fbf4c200e 
Event Xml: 
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Microsoft-ServiceFabric" Guid="{CBD93BC2-71E5-4566-B3A7-595D8EECA6E8}" /> 
    <EventID>23073</EventID> 
    <Version>0</Version> 
    <Level>3</Level> 
    <Task>90</Task> 
    <Opcode>0</Opcode> 
    <Keywords>0x8000000000000001</Keywords> 
    <TimeCreated SystemTime="2016-11-02T18:38:54.820567800Z" /> 
    <EventRecordID>7621</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="6944" ThreadID="3812" /> 
    <Channel>Microsoft-ServiceFabric/Admin</Channel> 
    <Computer>shayward10.ovx.local</Computer> 
    <Security UserID="S-1-5-18" /> 
    </System> 
    <EventData> 
    <Data Name="id">bf865279ba277deb864a976fbf4c200e</Data> 
    <Data Name="AppId">805915c7-456c-49d3-af95-62cc44650664</Data> 
    <Data Name="ReturnCode">3221225786</Data> 
    <Data Name="ProcessName">DataBinding.exe</Data> 
    </EventData> 
</Event> 

Log Name:  Microsoft-ServiceFabric/Admin 
Source:  Microsoft-ServiceFabric 
Date:   11/2/2016 2:38:56 PM 
Event ID:  256 
Task Category: Common 
Level:   Error 
Keywords:  Default 
User:   NETWORK SERVICE 
Computer:  shayward10.ovx.local 
Description: 
WriteNode failed. HRESULT=-2147467259, Output=CustomOutput 
Event Xml: 
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Microsoft-ServiceFabric" Guid="{CBD93BC2-71E5-4566-B3A7-595D8EECA6E8}" /> 
    <EventID>256</EventID> 
    <Version>0</Version> 
    <Level>2</Level> 
    <Task>1</Task> 
    <Opcode>0</Opcode> 
    <Keywords>0x8000000000000001</Keywords> 
    <TimeCreated SystemTime="2016-11-02T18:38:56.261857600Z" /> 
    <EventRecordID>7627</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="4440" ThreadID="8564" /> 
    <Channel>Microsoft-ServiceFabric/Admin</Channel> 
    <Computer>shayward10.ovx.local</Computer> 
    <Security UserID="S-1-5-20" /> 
    </System> 
    <EventData> 
    <Data Name="id"> 
    </Data> 
    <Data Name="type">XmlLiteWriter</Data> 
    <Data Name="text">WriteNode failed. HRESULT=-2147467259, Output=CustomOutput</Data> 
    </EventData> 
</Event> 

Các Event Viewer logs khi nó Times Out

khi dịch vụ trong tình trạng không thể tiếp cận, cố gắng gọi nó mang lại các bản ghi sau trên mỗi yêu cầu (sau khi chờ đợi 5 phút):

Log Name:  Microsoft-ServiceFabric/Admin 
Source:  Microsoft-ServiceFabric 
Date:   11/2/2016 2:44:55 PM 
Event ID:  44289 
Task Category: FabricTransport 
Level:   Warning 
Keywords:  Default 
User:   NETWORK SERVICE 
Computer:  shayward10.ovx.local 
Description: 
Error While Sending Message : FABRIC_E_TIMEOUT 
Event Xml: 
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Microsoft-ServiceFabric" Guid="{CBD93BC2-71E5-4566-B3A7-595D8EECA6E8}" /> 
    <EventID>44289</EventID> 
    <Version>0</Version> 
    <Level>3</Level> 
    <Task>173</Task> 
    <Opcode>0</Opcode> 
    <Keywords>0x8000000000000001</Keywords> 
    <TimeCreated SystemTime="2016-11-02T18:44:55.349048200Z" /> 
    <EventRecordID>7629</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="18600" ThreadID="8076" /> 
    <Channel>Microsoft-ServiceFabric/Admin</Channel> 
    <Computer>shayward10.ovx.local</Computer> 
    <Security UserID="S-1-5-20" /> 
    </System> 
<EventData> 
    <Data Name="id"> 
    </Data> 
    <Data Name="type">ServiceCommunicationClient</Data> 
    <Data Name="text">Error While Sending Message : FABRIC_E_TIMEOUT</Data> 
    </EventData> 
</Event> 

Trả lời

5

Sự cố này có thể xảy ra trong 2 trường hợp.

  1. Nếu xử lý phương pháp ActorService của bạn đang dùng nhiều hơn thời gian chờ mặc định, thì bạn cần thay đổi giá trị OperationTimeout. Theo mặc định, nó là 5 phút. Nếu bạn muốn thay đổi thời gian chờ, bạn có thể thay đổi thời gian chờ bằng cách thêm cụm từ FabricTransportServiceRemotingProviderAttribute vào danh sách khách hàng của bạn.

https://msdn.microsoft.com/en-us/library/microsoft.servicefabric.services.remoting.fabrictransport.fabrictransportserviceremotingproviderattribute.aspx

  1. Nếu kịch bản đầu tiên không phải là trường hợp, sau đó bạn có thể thử dưới đây giảm nhẹ cho một lỗi được biết.
    • Chỉ định cổng 0 trong Tệp kê khai dịch vụ cho điểm cuối ActorService. Theo mặc định, ActorEndpoint sẽ được liệt kê trong ServiceManifest nhưng cổng sẽ không có ở đó.

Đây là cách tìm kiếm ActorService sau khi bạn thay đổi.

<Endpoint Name="Actor1ActorServiceEndpoint" Port="0" /> 

Chúng tôi biết sự cố và khắc phục đang diễn ra.

+0

Xin chào @ MSFT-SuchiAgicha, có phải vấn đề dành riêng cho nam diễn viên hay nên giải pháp tương tự được áp dụng cho tất cả các dịch vụ nhà nước? Làm thế nào về thiết bị đầu cuối Replicator? Một ít chi tiết hơn sẽ được nhiều đánh giá cao. Cảm ơn –

+0

Điều này đã khắc phục được sự cố của chúng tôi. Rất rất cảm ơn! – Shaun

+0

Bạn không cần phải làm điều này cho các điểm cuối bản sao. –

Các vấn đề liên quan