Tworzenie systemu telemedycznego na platformie AzureBuilding a telehealth system on Azure

W tym artykule wyjaśniono, jak utworzyć system telekondycji przy użyciu usług Azure Cloud Services.This article explains how to build a telehealth system using Azure cloud services. Szczegółowe informacje są oparte na prawdziwej implementacji klienta, która nawiązuje połączenie profesjonalnej organizacji opieki zdrowotnej ze swoimi 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 tworzenia takiego systemu, opisane w nim rozwiązanie powiodło się w umożliwieniu komunikacji między pacjentami i ich dostawcy usług zdalnych, a także zdalne dostrajanie urządzeń medycznych, które są wykonywane przez pacjentów.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 000 000 osób, które cierpią na wysłuchanie.There are about 700 million people who suffer from hearing disabilities. Jednak tylko 10% z nich korzysta z słuchu urządzeń w celu poprawy ich życia.However, only 10% of them use hearing aid devices to improve their lives. W niektórych lokalizacje geograficzneach lub sytuacjach nie jest możliwe, aby pacjent mógł uzyskać bezpośrednią pomoc 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łuchu (na przykład podczas zaparkowania, wzięcia udziału w spotkaniu lub w domu), którego nie można odtworzyć w biurze specjalisty ds. 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.
  • Występują problemy z przenośnością lub znajdują się w długim czasie od profesjonalnego specjalisty ds. obsługi słuchu.Have mobility issues or reside long distances from their hearing care professional.
  • Na żywo w rozwijanym kraju, który ma ograniczoną liczbę specjalistów ds. słuchu.Live in an emerging country that has a limited number of hearing care professionals.

Aby wyeliminować te problemy, ważne jest, aby zapewnić zdalne dostarczanie usług słuchu.To overcome these difficulties, it is important to have the ability to provide hearing care services remotely. W takim przypadku specjalista ds. opieki zdrowotnej używa rozmowy 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 z upośledzeniem słuchu używa telefonu smartphone, aby umożliwić dostęp do urządzenia pomocy słuchu podczas sesji zdalnej.The hearing-impaired person uses a smartphone to allow access to the hearing aid device during the remote session. Pacjent powinien natychmiast przesłuchać, ponieważ specjalista zajmujący się słuchem wdraża zmiany w konfiguracji urządzenia pomocy słuchu 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:

  • Wszystkie urządzenia z obsługą technologii Bluetooth są dostępne i zdalnie dostrojone przy użyciu takiego rozwiązania.Any Bluetooth-enabled device can be accessed and remotely tuned using such a solution.
  • Komunikacja (tekstowa, głosowa, wideo) lub wymiana informacji (edukacja, badania satysfakcji) w ustawieniu zdalnym/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

Przegląd architektury składników platformy Azure zawartych w systemie telekondycji

Rozwiązanie jest oparte na czterech filarach, w tym:The solution is built on four pillars, including:

  • KlienciClients
  • Składniki komunikacyjneCommunication components
  • Interfejsy API i logika biznesowaAPIs and business logic
  • Usługi magazynu i infrastrukturyStorage and infrastructure services

Po lewej stronie diagramu architektury znajdują się klienci z dwiema grupami, specjalistą ds. opieki zdrowotnej i pacjenta.On the left side of the architectural diagram, there are clients in two groups, the healthcare professional and the patient. Specjalista ds. opieki zdrowotnej używa oprogramowania dopasowanego 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. Z drugiej strony pacjentów używają aplikacji mobilnej, która jest połączona 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 z powrotem i z nią odbywa się przy użyciu usług zaplecza:This back and forth communication is achieved using backend services:

  • Publiczne interfejsy APIPublic 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. sygnał to Biblioteka oprogramowania dla Microsoft ASP.NET, 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 utrwalany w kilku usługach platformy Azure (po prawej stronie diagramu), takich jak 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 usługi Azure Storage.Media files are saved in Azure storage accounts. Wszystkie dzienniki ze wszystkich usług są zbierane w scentralizowanym rozwiązaniu do rejestrowania, które korzysta z usługi Azure Application Insights.All logs from all services are gathered in a centralized logging solution that uses Azure Application Insights. Na koniec komunikacja asynchroniczna między klientami odbywa się za pośrednictwem powiadomień wypychanych przy użyciu Centrum powiadomień platformy Azure.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 następujący sposób:The solution was set up in this way to:

  • Skorzystaj z skalowalności usług w chmurze działających w zapleczu.Benefit from the scalability of the cloud services running in the backend.

  • Zwiększ autonomię zespołów tworzących rozwiązanie.Increase the autonomy of the teams building the solution. Każdy zespół przewidział domeny funkcjonalne i steruje ewolucją ich składnikó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, uproszczony potok ciągłej integracji/ciągłego wdrażania dla całego rozwiązania.Also, since the codebases of the services are independent, the CI/CD pipeline for the entire solution is simplified.

  • Tworzenie mechanizmów komunikacji i koordynacji między usługami wymaganym przez dystrybucję funkcji w mikrousługach.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ększaj możliwości rozwiązywania problemów z rozwiązaniem.Achieve central monitoring and enhance the ability to troubleshoot the solution.

SkładnikiComponents

  • Azure Database for PostgreSQL przechowuje użytkownika (specjalistę i informatyków) oraz dane związane z urządzeniami.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 oraz ułatwia wdrażanie i elastyczność dostosowywania.Azure Kubernetes Service hosts the application business logic and provides ease of deployment and flexibility for customization. Usługa również podzieli rozwiązanie od rzeczywistego sprzętu używanego poniżej.The service also abstracts the solution from the actual hardware used underneath.
  • Pamięć podręczna systemu Azure dla usługi Redis hostuje dane tymczasowe używane do danych w ramach usług (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, gdy dane wygasną 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 zawartości przychodzącej: rozmowa, wywołania wideo, ustawienia konfiguracji urządzenia.Azure Notification Hub notifies patient of incoming content: chat, video calls, device configuration settings.
  • Azure Functions harmonogram zadań.Azure Functions schedules tasks. Na przykład szeroka komunikacja z dużym zbiorem użytkowników, koordynacja prac analitycznych w ramach zaplecza (agregacje...).For instance, broad communications to large set of users, coordination of analytics work in the backend (aggregations…).
  • Usługa Azure Application Insights umożliwia scentralizowanie sygnałów/zdarzeń 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 plików skryptów Java) do portalu sieci Web oraz do dostarczania plików multimedialnych (wideo, obrazów) za pomocą 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. Wszystkie te zawartość są przechowywane na kontach usługi Azure Storage w tle.All this content is stored in the Azure storage accounts in the background.
  • Usługa Azure Traffic Manager równoważenia obciążenia między lokalizacjami geograficznymi.Azure Traffic Manager load balances between geo locations.
  • Usługa Azure sygnalizująca pozwala serwerowi na wysyłanie asynchronicznych powiadomień 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 dopasowywania przygotuje powiadomienie, które zawiera plik JSON lub zawartość konfiguracyjną dla urządzenia.In Standard mode, the fitting software prepares a notification, which contains some configuration JSON file or content for the device. Powiadomienie zostanie następnie przekazane do centrum powiadomień platformy Azure, które wypycha powiadomienie do telefonu 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 specjalista ds. słuchu używa oprogramowania dopasowanego do wypychania szczegółowej konfiguracji 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 zapleczem a urządzeniem, które sygnalizujące osiąga przy użyciu funkcji 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ę na końcu odbioru tego kanału.The end user's phone is on the receiving end of this channel. Po nawiązaniu połączenia Bluetooth ustanawia końcowe łącze komunikacyjne z urządzeniem.From the phone, the Bluetooth connection establishes the final communication link with the device.

AlternatywyAlternatives

Po stronie bazy danych mogą być używane inne usługi bazy danych PaaS.On the database side, any other PaaS database services could be used. W celu hostowania logiki aplikacji należy użyć usługi Azure Kubernetes, usługi Azure Application Service lub Azure Service Fabric.For hosting the application logic, rather that Azure Kubernetes Service, Azure Application Service or Azure Service Fabric could be used.

NauceLearnings

Zalecamy używanie usługi Traffic Manager przed różnymi klastrami w celu optymalizacji pod kątem opóźnień między regionami i jako mechanizmu rezerwowego, gdy 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 zalecamy korzystanie z replik tylko do odczytu dla zapytań wymagających ł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 sieci Web (. html,. js, obrazów itp.) globalnie przy użyciu usługi Content Delivery Network (CDN) w celu zwiększenia szybkości buforowania.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 do uwzględnienia podczas wdrażania tego scenariusza jest koordynacja wdrożeń w ramach zaplecza opartego na chmurze i frontonu (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). Rozważ 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 pomysłu istnienia każdej domeny funkcjonalnej przy użyciu konkretnej mikrousługi, długoterminowej, 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. Wykonanie tej czynności spowoduje włączenie izolacji zasad i autonomii przepływu związanego z każdą mikrousługą zamiast skoncentrowania danych związanych z 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 aprowizacji i zarządzania tymi bazami danych, które jest jednym 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. Warstwę zarządzania bazami danych należy zintegrować w rozwiązaniu oraz w ujednoliconym rozwiązaniu monitorowania.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 powinien być federacyjny do jednego zasobnika 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 włączenie korelacji wszystkich tych dzienników i punktów danych telemetrii w celu zapewnienia całościowego wglądu w składniki i warstwy.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 systemu Windows (oprogramowanie do montażu na pulpicie specjalisty ds. słuchu)Windows application (fitting software on the hearing care professional's desktop)
  • Logika hostowanej aplikacjiHosted application logic
  • Usługi w chmurzeCloud services

Ustalanie wielkości i skalowanieSizing and scaling

Pamiętaj, aby zoptymalizować konfigurację klastrów usługi Azure Kubernetes w taki sposób, aby odpowiadały wymaganiom skalowania, które zmieniają godzinę lub wzorce regionalne.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 Azure Database for 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 wydajniejszą obsługę danych związanych z czasem pochodzącymi 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. Rozważ użycie rozwiązania skalowalnego w poziomie, takiego jak Azure Database for PostgreSQL — Citus, aby osiągnąć skalę globalną przez zainicjowanie obsługi 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.

Zabezpieczenia i zgodność z przepisamiSecurity and compliance

To rozwiązanie obsługuje dane Fi i Personal.This solution handles PHI and personal data. W związku z tym ważne jest korzystanie z usług certyfikowanych przez aplikacje medyczne (certyfikaty HIPAA, nie tylko dla danych, które pozostaną w bazie danych, ale również dzienników i danych telemetrycznych).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). Aby uzyskać szczegółowe informacje, zapoznaj się z sekcją 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 cen .For 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, weź pod uwagę Budowanie umiejętności wokół usług sieci Web, baz danych (takich jak Azure Database for PostgreSQL) oraz technik i technologii projektowania aplikacji mobilnych/telefonów ( takie jak Xamarin, .NET Coreitd.).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/phone application development techniques and technologies (such as Xamarin, .Net Core, etc.).

Komunikacja w czasie rzeczywistymReal-time communications

Więcej informacji o tym, jak protokołu WebRTC zapewnia funkcje komunikacji w czasie rzeczywistym dla aplikacji mobilnych, jest dostępny w witrynie projektu protokołu WebRTC.More information about how WebRTC provides real-time communication capabilities to mobile applications is available on the WebRTC project site.

Włącz serweryTurn servers

Użyj biblioteki klienta, takiej jak Icelink (załadowanej przez aplikację na telefonie oraz przez oprogramowanie do dopasowywania pulpitu specjalisty ds. słuchu), aby zarządzać serwerami* włączania i typów połączeń (TCP, UDP, P2P) między tymi dwoma Klienci (wyposażanie oprogramowania i aplikacji na telefon).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 kliencka: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 zmian przepustowościManages the connection in case of errors, missing packets, automatically adjusts the streaming to the variations of the bandwidth
  • Koduj/dekoduje wywołania (audio i/lub wideo) podczas wywołańEncode/decodes the calls (audio and/or video) during the calls

*Obrót serwerów to jednostki sieciowe, które pobierają 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ą one hostowane przez https://xirsys.com/ 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.