Tworzenie systemu telemedycznego na platformie AzureBuilding a telehealth system on Azure

W tym artykule wyjaśniono, jak utworzyć system telezdrowia przy użyciu usług w chmurze platformy Azure.This article explains how to build a telehealth system using Azure cloud services. Szczegóły są oparte na prawdziwej implementacji klienta, która łączy profesjonalną organizację opieki zdrowotnej z jej zdalnymi pacjentami.The details are based on a real customer implementation that connects a professional healthcare organization to its remote patients. Chociaż istnieją inne sposoby budowy takiego systemu, opisane rozwiązanie udało się umożliwić komunikację między pacjentami a ich dostawcą zdalnej opieki, a także zdalnie dostrajać urządzenia medyczne, które noszą pacjenci.While there are other ways to build such a system, the solution described has been successful in enabling communication between patients and their remote care provider, as well as remotely tuning the medical devices that patients carry.

Istnieje około 700 milionów osób, które cierpią z powodu niesłyszących słuchu.There are about 700 million people who suffer from hearing disabilities. Jednak tylko 10% z nich korzysta z aparatów słuchowych, aby poprawić swoje życie.However, only 10% of them use hearing aid devices to improve their lives. W niektórych regionach geograficznych lub sytuacjach pacjent nie może uzyskać bezpośredniej pomocy w razie potrzeby.In some geographies or situations, it is impossible for a patient to get direct assistance when needed. Rozważmy na przykład pacjentów, którzy:For example, consider patients who:

  • Potrzebujesz pomocy w konkretnej sytuacji słuchowej (na przykład podczas spaceru w parku, uczestniczenia w imprezie lub przebywania w domu), której nie można odtworzyć w gabinecie protesysy słuchu.Need help in a specific hearing situation (for example, while walking in the park, attending a party, or being at home), which cannot be reproduced in the hearing care professional's office.
  • Mają problemy z poruszaniem się lub przebywają na duże odległości od swojego protezy słuchu.Have mobility issues or reside long distances from their hearing care professional.
  • Mieszkaj w rozwijającym się kraju, który ma ograniczoną liczbę protez słuchu.Live in an emerging country that has a limited number of hearing care professionals.

Aby przezwyciężyć te trudności, ważne jest, aby mieć możliwość świadczenia usług opieki słuchowej zdalnie.To overcome these difficulties, it is important to have the ability to provide hearing care services remotely. W takim przypadku pracownik służby zdrowia korzysta z czatu lub komunikacji wideo, aby współpracować ze swoimi zdalnymi pacjentami.In this case, the healthcare professional uses chat or video communication to engage with their remote patients. Osoba niedosłysząca korzysta ze smartfona, aby umożliwić dostęp do aparatu słuchowego podczas sesji zdalnej.The hearing-impaired person uses a smartphone to allow access to the hearing aid device during the remote session. Pacjent natychmiast doświadcza poprawy słuchu, gdy protetykiem słuchu wdraża zmiany w konfiguracji aparatu słuchowego w czasie rzeczywistym.The patient immediately experiences improved hearing as the hearing care professional deploys changes to the configuration of the hearing aid device in real time.

Potencjalne przypadki użyciaPotential use cases

Następujące dodatkowe przypadki użycia mają podobne wzorce projektowe:The following additional use cases have similar design patterns:

  • Za pomocą takiego rozwiązania można uzyskać dostęp do dowolnego urządzenia obsługującego technologię Bluetooth i zdalnie dostroić je.Any Bluetooth-enabled device can be accessed and remotely tuned using such a solution.
  • Komunikacja (tekst, głos, wideo) lub wymiana wiedzy (edukacja, badania satysfakcji) w odległym otoczeniu/kontekście.Communication (text, voice, video) or knowledge exchange (education, satisfaction surveys) in a remote setting/context.
  • Globalnie rozproszone zarządzanie zawartością sieci Web.Globally distributed web content management.
  • Internet rzeczy (IoT)Internet of Things (IoT)

ArchitekturaArchitecture

Omówienie architektury składników platformy Azure zawartych w systemie telowo-zdrowotnym

Rozwiązanie opiera się na czterech filarach, w tym:The solution is built on four pillars, including:

  • KlienciClients
  • Komponenty komunikacyjneCommunication components
  • Interfejsy API i logika biznesowaAPIs and business logic
  • Usługi w zakresie magazynowania i infrastrukturyStorage and infrastructure services

Po lewej stronie schematu architektonicznego znajdują się klienci w dwóch grupach, pracownik służby zdrowia i pacjent.On the left side of the architectural diagram, there are clients in two groups, the healthcare professional and the patient. Pracownik służby zdrowia korzysta z oprogramowania montażowego i klientów portalu internetowego do komunikowania się ze swoimi pacjentami.The healthcare professional uses the fitting software and web portal clients to communicate with their patients. Pacjenci natomiast korzystają z aplikacji mobilnej połączonej z urządzeniem medycznym za pośrednictwem połączenia Bluetooth.The patients, on the other hand, use a mobile app that is linked to the medical device via a Bluetooth connection. Ta komunikacja tam iz powrotem jest osiągana przy użyciu usług zaplecza:This back and forth communication is achieved using backend services:

  • Interfejsy API skierowane do osób publicznychPublic facing APIs
  • Wewnętrzne mikrousługi, które są odpowiedzialne za przepływy pracy, takie jak wywołania wideo za pośrednictwem sieci Web RTC lub komunikacji klient-klient przy użyciu sygnału.Internal microservices that are responsible for workflows such as video calls through Web RTC or client-to-client communication using Signal. signal jest biblioteką oprogramowania dla ASP.NET firmy Microsoft, która umożliwia kod serwera do wysyłania asynchronicznych powiadomień do aplikacji sieci web po stronie klienta.signal is a software library for Microsoft ASP.NET that allows server code to send asynchronous notifications to client-side web applications.

Stan tych usług jest zachowywany w kilku usługach platformy Azure (po prawej stronie diagramu), takich jak Usługa Azure Database for PostgreSQL.The state of these services is persisted in several Azure services (on the right side of the diagram) such as Azure Database for PostgreSQL. Pliki multimedialne są zapisywane na kontach magazynu platformy Azure.Media files are saved in Azure storage accounts. Wszystkie dzienniki ze wszystkich usług są zbierane w scentralizowanym rozwiązaniu rejestrowania, które używa usługi Azure Application Insights.All logs from all services are gathered in a centralized logging solution that uses Azure Application Insights. Na koniec komunikacji asynchroniczna można osiągnąć między klientami za pośrednictwem powiadomień wypychanych za pomocą usługi Azure Notification Hub.Finally, asynchronous communication can be achieved between the clients through push notifications using the help of the Azure Notification Hub.

Rozwiązanie zostało skonfigurowane w ten sposób w celu:The solution was set up in this way to:

  • Korzystaj ze skalowalności usług w chmurze uruchomionych w wewnętrznej bazy danych.Benefit from the scalability of the cloud services running in the backend.

  • Zwiększ autonomię zespołów budujących rozwiązanie.Increase the autonomy of the teams building the solution. Każdy zespół nadzoruje domeny funkcjonalne i napędza ewolucję ich komponentów.Each team oversees functional domains and drives the evolution of their components. Ponieważ domeny funkcjonalne nie nakładają się na siebie, każdy zespół może wprowadzać innowacje we własnym tempie.Since the functional domains do not overlap, each team can innovate at its own pace. Ponadto ponieważ bazy kodu usług są niezależne, potok ciągłej integracji/ciągłego wdrażania dla całego rozwiązania jest uproszczony.Also, since the codebases of the services are independent, the CI/CD pipeline for the entire solution is simplified.

  • Tworzenie mechanizmu komunikacji i koordynacji między usługami wymagane przez dystrybucję funkcji między mikrousługami.Build the inter-services communication and coordination mechanism required by the distribution of functionalities across microservices. Rozwiązanie opisane w tym dokumencie używa usługi Azure Cache for Redis do wykonania tego zadania.The solution described in this document uses Azure Cache for Redis to accomplish this task.

  • Uzyskaj centralne monitorowanie i zwiększ możliwości rozwiązywania problemów z rozwiązaniem.Achieve central monitoring and enhance the ability to troubleshoot the solution.

SkładnikiComponents

  • Usługa Azure Database for PostgreSQL przechowuje dane użytkownika (pacjenta i pracownika służby zdrowia) oraz dane związane z urządzeniem.Azure Database for PostgreSQL stores user (patient and health care professional) and device-related data. Usługa została wybrana, ponieważ jest stabilna, lekka i nie ma blokady dostawcy.The service was chosen because it's stable, lightweight, and has no vendor lock-in.
  • Usługa Azure Kubernetes obsługuje logikę biznesową aplikacji i zapewnia łatwość wdrażania i elastyczność dostosowywania.Azure Kubernetes Service hosts the application business logic and provides ease of deployment and flexibility for customization. Usługa również abstrakcji rozwiązania z rzeczywistego sprzętu używanego pod spodem.The service also abstracts the solution from the actual hardware used underneath.
  • Usługa Azure Cache for Redis obsługuje dane tymczasowe używane do danych wewnątrzusługi (danych udostępnionych).Azure Cache for Redis hosts temporary data used for intra service data (shared data). Usługę można odtworzyć z bazy danych w przypadku wygaśnięcia danych z pamięci podręcznejThe service can be recreated from the database in case the data expires from the cache
  • Usługa Azure Notification Hub powiadamia pacjenta o przychodzących treściach: czacie, połączeniach wideo, ustawieniach konfiguracji urządzenia.Azure Notification Hub notifies patient of incoming content: chat, video calls, device configuration settings.
  • Usługa Azure Functions planuje zadania.Azure Functions schedules tasks. Na przykład szeroka komunikacja z dużym zestawem użytkowników, koordynacja pracy analitycznej w wewnętrznej cenie (agregacje...).For instance, broad communications to large set of users, coordination of analytics work in the backend (aggregations…).
  • Usługa Azure Application Insights centralizuje sygnały/zdarzenia z systemu (dzienniki, dane telemetryczne z dzienników z mikrousług, frontonu i urządzeń) w celu rozwiązywania problemów.Azure Application Insights centralizes signals/events from the system (logs, telemetry from logs from microservices, frontend, and devices) for troubleshooting purposes.
  • Usługa Azure Content Delivery Network (CDN) służy do konserwacji i aktualizacji (dostarczania pliku skryptów Java) do portalu sieci web oraz do dostarczania plików multimedialnych (klipów wideo, obrazów) za pośrednictwem portalu.Azure Content Delivery Network (CDN) is used for maintenance and updates (delivery of java scripts file) to the web portal and to deliver media files (videos, images) through the portal. Cała ta zawartość jest przechowywana na kontach magazynu platformy Azure w tle.All this content is stored in the Azure storage accounts in the background.
  • Równoważe obciążenia usługi Azure Traffic Manager między lokalizacjami geograficznymi.Azure Traffic Manager load balances between geo locations.
  • Usługa Azure SignalR umożliwia kod serwera do wysyłania powiadomień asynchronicznych do aplikacji sieci web po stronie klienta.Azure SignalR allows server code to send asynchronous notifications to client-side web applications. Urządzenia użytkownika końcowego można skonfigurować w trybie ## Standard## lub ## Advanced##.End-user devices can be configured in either ## Standard## or ## Advanced## mode.

Tryb standardowyStandard mode

W trybie standardowym oprogramowanie do montażu przygotowuje powiadomienie, które zawiera plik JSON konfiguracji lub zawartość urządzenia.In Standard mode, the fitting software prepares a notification, which contains some configuration JSON file or content for the device. Powiadomienie jest następnie przekazywane do usługi Azure Notification Hub, która wypycha powiadomienie na telefon użytkownika.The notification is then passed to Azure Notification Hub, which pushes the notification to the user's phone.

Tryb zaawansowanyAdvanced mode

W trybie zaawansowanym protez aparatu słuchowego używa oprogramowania do montażu, aby wypchnąć szczegółową konfigurację urządzenia.In Advanced mode, the hearing aid professional uses the fitting software to push detailed configuration to the device. Wymaga to stabilnego i niezawodnego połączenia między wewnętrznej bazy danych i urządzenia, które SignalR osiąga za pomocą WebSockets.This requires a stable and reliable connection between the backend and the device, which SignalR achieves by using WebSockets. Telefon użytkownika końcowego znajduje się po stronie odbiorczej tego kanału.The end user's phone is on the receiving end of this channel. Z telefonu połączenie Bluetooth ustanawia ostateczne połączenie komunikacyjne z urządzeniem.From the phone, the Bluetooth connection establishes the final communication link with the device.

AlternatywyAlternatives

Po stronie bazy danych można użyć innych usług bazy danych PaaS.On the database side, any other PaaS database services could be used. Do obsługi logiki aplikacji, a raczej usługi Azure Kubernetes, usługi aplikacji platformy Azure lub usługi Azure Service Fabric może być używany.For hosting the application logic, rather that Azure Kubernetes Service, Azure Application Service or Azure Service Fabric could be used.

WiedzaLearnings

Zaleca się użycie menedżera ruchu przed różnymi klastrami w celu optymalizacji pod kątem opóźnień między regionami i jako mechanizm rezerwowy, jeśli klastry staną się niedostępne.We recommend using a traffic manager in front of the different clusters to optimize for latency between regions and as a fallback mechanism should the clusters become unavailable. W przypadku baz danych zaleca się używanie replik tylko do odczytu dla kwerend, które wymagają ładowania i agregowania dużej ilości danych.For the databases, we recommend using read-only replicas for queries that require loading and aggregating a large amount of data. Zalecamy dostarczanie statycznych plików internetowych (.html, .js, obrazy, itp.) na całym świecie za pomocą sieci dostarczania zawartości (CDN), aby poprawić szybkość poprzez buforowanie.We recommend delivering static web files (.html, .js, images, etc.) globally using a content delivery network (CDN) to improve speed through caching.

WdrożenieDeployment

Najważniejszym aspektem, który należy wziąć pod uwagę podczas wdrażania tego scenariusza, jest koordynacja wdrożeń w chmurze i wewnętrznej bazie danych (telefony/urządzenia).The most important aspect to consider when deploying this scenario is the coordination of deployments across the cloud-based backend and the frontend (phones/devices). Należy rozważyć użycie koncepcji flagi funkcji, aby to osiągnąć.Consider using the concept of a feature flag to achieve this.

ZarządzanieManagement

Aby lepiej dostosować się do idei o każdej domeny funkcjonalnej zajmuje się przy użyciu określonych mikrousług, długoterminowe, istnieje możliwość podziału bazy danych na kilka mniejszych baz danych.To better align to the idea of having each functional domain dealt with using a specific microservice, long term, there is an opportunity to split the database into several smaller databases. Umożliwi to izolację zasady i autonomii przepływu związane z każdej mikrousługi, w przeciwieństwie do koncentracji danych związanych ze wszystkimi usługami w jednej bazie danych.Doing so will enable the principle isolation and autonomy of the flow related to each microservice as opposed to concentrating the data related to all services into a single database. Osiągnięcie tego celu będzie wymagało automatyzacji inicjowania obsługi administracyjnej i zarządzania tymi bazami danych, co jest jedną z podstawowych możliwości usługi bazy danych PaaS w chmurze.Achieving this goal will require automating provisioning and managing those databases, which is one of the core capabilities of a PaaS database service in the cloud. Ta warstwa zarządzania bazami danych powinna być zintegrowana z rozwiązaniem, a także z ujednoliconym rozwiązaniem monitorującym.That database management layer should be integrated in the solution as well as into the unified monitoring solution.

MonitorowanieMonitoring

Ważne jest, aby monitorować każdą z warstw, a każdy aspekt monitorowania powinny być sfederowane w jednym zasobniku w chmurze.It is important to monitor each of the tiers, and each monitoring facet should be federated into a single bucket in the cloud. Ważne jest, aby włączyć korelację wszystkich tych dzienników i punktów danych telemetrycznych, aby zapewnić całościowe spostrzeżenia między składnikami i warstwami.It is important to enable the correlation of all these logs and telemetry data points to ensure holistic insights across components and layers.

Obecnie monitorowane warstwy obejmują:Today, monitored layers include the:

  • Aplikacja Windows (mocowanie oprogramowania na pulpicie protezów słuchu)Windows application (fitting software on the hearing care professional's desktop)
  • Logika hosta aplikacjiHosted application logic
  • Usługi w chmurzeCloud services

Zmiana rozmiaru i skalowanieSizing and scaling

Upewnij się, że zoptymalizować konfigurację klastrów platformy Azure Kubernetes, aby dopasować wymagania dotyczące skali, które zmieniają się wraz z porą dnia lub wzorców regionalnych.Make sure to optimize the configuration of the Azure Kubernetes clusters to match the scale requirements that fluctuate with the time of the day or regional patterns. Należy rozważyć odciążanie obciążeń odczytu (takich jak agregowanie zapytań) przy użyciu replik odczytu w usłudze Azure Database dla PostgreSQL.Consider offloading read workloads (such as aggregating queries) by using Read Replicas in Azure Database for PostgreSQL.

Korzystanie z rozszerzenia TimescaleDB PostgreSQL umożliwi bardziej efektywną obsługę danych związanych z czasem pochodzących z urządzeń medycznych.Using the TimescaleDB extension of PostgreSQL will enable more efficient handling of the time-related data coming from the medical devices. Należy rozważyć użycie rozwiązania skalowania w poziomie, takiego jak Usługa Azure Database for PostgreSQL — Hiperskala (Citus), aby osiągnąć skalę globalną, inicjując inicjowanie obsługi administracyjnej wielu węzłów bazy danych.Consider using a scale out solution such as Azure Database for PostgreSQL – Hyperscale (Citus) to reach global scale by provisioning multiple database nodes.

Bezpieczeństwo i zgodnośćSecurity and compliance

To rozwiązanie obsługuje phi i dane osobowe.This solution handles PHI and personal data. W związku z tym ważne jest, aby korzystać z usług, które są certyfikowane dla aplikacji medycznych (certyfikaty HIPAA, nie tylko dla danych, które pozostają w bazie danych, ale także dzienniki i dane telemetryczne).As such, it is important to use services that are certified for medical applications (HIPAA certifications, not only for the data that remains in the database but also the logs and telemetry data). Szczegółowe informacje można znaleźć w sekcji HIPAA w Centrum zaufania firmy Microsoft.For details please consult the HIPAA section of the Microsoft Trust Center.

CennikPricing

W przypadku wdrożenia w jednym regionie przykładowe informacje o cenach są dostępne w kalkulatorze cenFor a deployment in a single region, example pricing information is available in the Pricing Calculator

Następne krokiNext steps

Aby rozpocząć wdrażanie porównywalnej architektury dla twojej firmy, należy rozważyć tworzenie umiejętności dotyczących usług sieci web, baz danych, takich jak Usługa Azure Database for PostgreSQL,oraz technik i technologii tworzenia aplikacji mobilnych, takich jak Xamarin i .Net Core.To get started with implementing a comparable architecture for your business, consider building skills around web services, databases such as Azure Database for PostgreSQL, and mobile application development techniques and technologies such as Xamarin and .Net Core.

Komunikacja w czasie rzeczywistymReal-time communications

Więcej informacji o tym, jak WebRTC zapewnia możliwości komunikacji w czasie rzeczywistym do aplikacji mobilnych, jest dostępna w witrynie projektu WebRTC.More information about how WebRTC provides real-time communication capabilities to mobile applications is available on the WebRTC project site.

Włączanie serwerówTurn servers

Użyj biblioteki klienta, takiej jak Icelink (ładowanej przez aplikację na telefon i przez oprogramowanie dopasowywanie pulpitu protezów aparatu słuchowego) do zarządzania serwerami* kolei i rodzajami połączeń (tcp, udp, p2p) między dwoma klientami (oprogramowanie do montażu i aplikacja w telefonie).Use a client library such as Icelink (loaded by the application on the phone and by the fitting software of the desktop of the hearing aid professional) to manage the turn servers* and the types of connection (tcp, udp, p2p) between the two clients (fitting software and application on the phone). Biblioteka klienta:The client library:

  • Tworzy kanał przesyłania strumieniowegoCreates the streaming channel
  • Ustanawia połączeniaEstablishes the connections
  • Zarządza połączeniem w przypadku błędów, brakujących pakietów, automatycznie dostosowuje przesyłanie strumieniowe do odmian przepustowościManages the connection in case of errors, missing packets, automatically adjusts the streaming to the variations of the bandwidth
  • Kodowanie/dekodowanie połączeń (audio i/lub wideo) podczasEncode/decodes the calls (audio and/or video) during the calls

*Turn serwery są jednostkami sieciowymi odpowiedzialnymi za przekazywanie nośników w protokołach związanych z VoIP.*Turn servers are network entities in charge of relaying media in VoIP related protocols. W tym rozwiązaniu są https://xirsys.com/ one hostowane przez kilka centrów danych na całym świecie.In this solution they are hosted by https://xirsys.com/ in several datacenters worldwide. Ustanawia bezpośrednie połączenie między dwoma klientami w ramach tej samej sesji.Establishes direct connection between two clients under the same session.