将遗留系统分解为微服务:第 2 部分

在当今不断发展的技术环境中,从整体架构向微服务的转变对于许多企业来说都是一项战略举措。这在报销计算系统领域尤其重要。正如我在上一篇文章第 1 部分应用 Strangler 模式将遗留系统分解为微服务-CSDN博客中提到的,让我们探讨如何有效管理这种转变。

整体挑战

想象一个场景,您有一个大规模的整体系统 - 可能是一个庞大的 C# 控制台应用程序或一个广泛的 SQL Server 存储过程。该系统的任务是执行报销计算,通常通过 SQL Server 中安排的批处理过程过夜运行。虽然功能强大,但这种单一方法通常会带来可扩展性、灵活性和维护方面的挑战。

转向微服务

迁移到微服务的目标是将这个大型、复杂的系统分解为更小、更易于管理的组件。向微服务架构的过渡旨在利用云的优势,包括可扩展性、资源优化和成本效益。

迁移步骤

1. 理解系统

首先从现有的整体应用程序定义数据模型,以了解其工作流程、依赖关系以及报销计算过程的关键组件。该系统的源数据通过837 文件 ,这是医疗保健索赔信息的标准化电子格式。提取该文件并通常通过另一个加载过程将数据加载到数据库中以用于报销计算。例如,837 文件中的一些数据模型可能如下所示:

public class Patient
{public string Name { get; set; }public DateTime DateOfBirth { get; set; }public string Address { get; set; }public string Gender { get; set; }public string PatientId { get; set; }
}public class Provider
{public string Name { get; set; }public string Address { get; set; }public string NPI { get; set; }public string TaxID { get; set; }public string RenderingProvider { get; set; }
}public class Claim
{public string ControlNumber { get; set; }public DateTime ServiceFromDate { get; set; }public DateTime ServiceToDate { get; set; }public string TypeOfBill { get; set; }public string AdmissionType { get; set; }public string DischargeStatus { get; set; }public List<string> DiagnosisCodes { get; set; }public List<string> ProcedureCodes { get; set; }
}public class Insurance
{public string PayerName { get; set; }public string PayerAddress { get; set; }public string PayerId { get; set; }public string SubscriberInformation { get; set; }public string SubscriberId { get; set; }public string CoordinationOfBenefitsData { get; set; }
}public class ServiceLine
{public string RevenueCode { get; set; }public DateTime ServiceDate { get; set; }public int ServiceUnits { get; set; }public decimal ServiceCharges { get; set; }public List<string> ServiceModifiers { get; set; }
}

2. 识别微服务

将整体流程分解为更小的、逻辑上独立的服务。每个微服务应代表报销计算的特定方面,例如输入验证、计算逻辑和输出生成。在许多情况下,医疗报销系统可能涉及多个微服务协同工作以提供端到端功能。以下是一些可能成为综合医疗报销系统一部分的微服务:

图片

出于演示目的,我将提供报销计算服务的简化实现。假设患者信息、程序详细信息和费用表数据是从各自的微服务中检索的,并作为输入传递到此服务,Reimbursement.web 层 :


using Microsoft.AspNetCore.Mvc;
using Reimbursement.Service;namespace Reimbursement.Controllers
{[Route("api/[controller]")][ApiController]public class ReimbursementController : ControllerBase{private IReimbursementService _reimbursementService;public ReimbursementController(IReimbursementService reimbursementService){_reimbursementService = reimbursementService;}[HttpPost("calculate")]public ActionResult<decimal> CalculateExpectedReimbursement(Patient patient, Procedure procedure, FeeSchedule feeSchedule){try{decimal expectedReimbursement = _reimbursementService.CalculateExpectedReimbursement(patient, procedure, feeSchedule);return Ok(expectedReimbursement);}catch (Exception ex){return StatusCode(500, $"Internal server error: {ex.Message}");}}}
}

报销服务层:


using System;namespace Reimbursement.Service
{public class ReimbursementService : IReimbursementService{public decimal CalculateExpectedReimbursement(Patient patient, Procedure procedure, FeeSchedule feeSchedule){// Check if the patient and procedure existif (patient == null || procedure == null){throw new ArgumentNullException("Patient and Procedure must be provided.");}// Check if the feeSchedule existsif (feeSchedule == null){throw new ArgumentNullException("FeeSchedule must be provided.");}// Calculate the expected reimbursementdecimal expectedReimbursement = feeSchedule.Fee; // Basic reimbursement logic// You can add more complex reimbursement calculations here based on patient data and rulesreturn expectedReimbursement;}}
}

医疗报销系统中微服务的确切组成和架构可能会根据应用程序的特定需求和规模而有所不同。上面列出的服务是可以成为此类系统一部分的组件示例,它们可以通过 API 或消息队列相互交互以执行端到端报销流程。

3. 云端批处理

使夜间批处理适应云环境。这可能涉及利用云原生服务来执行计划任务,确保流程可靠且可扩展。CalculationService 也可以通过用户界面手动触发,以防用户仅需要为特定帐户重新运行,以便可以在批处理以外的地方重用该服务。

结论

将复杂的单一报销计算系统迁移到微服务并将其部署在云中是一个变革性的步骤。这种方法不仅使系统现代化,而且在可扩展性、资源利用率和成本节约方面带来了显着的好处,使系统与现代云功能保持一致,并且业务目标。


作者:Greg Hall

更多技术干货请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

irds.cn,多数据库管理平台(私有云)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kylin的工作原理及使用分享:构建大数据分析之塔

学习目标&#xff1a; 了解Kylin的工作原理和基本概念理解Kylin在大数据分析中的作用和价值学会使用Kylin进行数据建模、数据预处理和查询 学习内容&#xff1a; 什么是Kylin&#xff1f; Kylin是一个开源的分布式分析引擎&#xff0c;专注于大数据的实时多维分析。它能够通过…

Appium Server 启动失败常见原因及解决办法

Error: listen EADDRINUSE: address already in use 0.0.0.0:4723 如下图&#xff1a; 错误原因&#xff1a;Appium 默认的4723端口被占用 解决办法&#xff1a; 出现该提示&#xff0c;有可能是 Appium Server 已启动&#xff0c;关闭已经启动的 Appium Server 即可。472…

Alien Skin Exposure 7汉化破解版下载 V 7.1.0.214 中文注册版

软件介绍 Alien Skin Exposure 7是一款超好用的PS胶片效果调色滤镜&#xff0c;它为数码照片提供胶片的曝光&#xff0c;还包括模仿胶片的颗粒感&#xff0c;并且可以控制胶片颗粒的分布&#xff0c;能够帮助用户对图片进行更好的处理&#xff01; 软件特色 1、支持RAW格式&a…

node-red:使用node-red-contrib-amqp节点,实现与RabbitMQ服务器(AMQP)的消息传递

node-red-contrib-amqp节点使用 一、简介1.1 什么是AMQP协议?1.2 什么是RabbitMQ? -> 开源的AMQP协议实现1.3 RabbitMQ的WEB管理界面介绍1.3 如何实现RabbitMQ的数据采集? -> node-red 二、node-red-contrib-amqp节点安装与使用教程2.1 节点安装2.2 节点使用2.2.1 amq…

Ultra Mobile PayGO购买充值激活

一、前言 Ultra Mobile PayGO免费无限拨打 80 多个国际目的地&#xff0c;还可以向 190 多个国际目的地发送短信。在现在ai智能时代&#xff0c;我自己也需要一张这样的卡&#xff0c;今天用fomepay的虚拟卡激活了这张电话卡&#xff0c;根据需要按套餐购买。 二、点击申请fom…

vue-pure-admin源码解读与使用

vue-pure-admin 全面使用ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统&#xff08;兼容移动端&#xff09;,目前斩获11.5k个star。 界面构成 主题Layout的组成 左边sidebar由Vertical组件定义tab标签栏由layoutHeader组件定义中间Body由appMain组件定义 为何点…

matlab 点云最小二乘拟合空间直线(PCA法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 见:matlab 点云最小二乘拟合空间直线。 二、代码实现 clc;clear; %% ----

【数字图像处理】实验三 图像增强

图像增强 一、实验内容&#xff1a; 1&#xff0e; 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2&#xff0e; 熟练掌握各种图像增强的基本原理及方法。 3&#xff0e; 能够从深刻理解图像增强&#xff0c;并能够思考拓展到一定的应用领域。…

VM Group

在复杂方案中模块过多可能造成查看或修改方案时存在视觉混乱&#xff0c;不够直观。此时可利用Group模块进行模块整合&#xff0c;同时Group模式也兼容循环的功能&#xff0c;如下图所示。 双击Group模块可进入Group内部&#xff0c;如下图所示。 在Group模块单击 可设置输入、…

两款超好用的视频翻译软件,适合两种不同场景,必有一款适合你

今天给大家推荐2个视频翻译工具​&#xff0c;分别是&#xff1a; TransDuckYouTube中文配音 这两款工具的核心功能非常类似&#xff0c;核心提供一个视频语言翻译的能力。比如&#xff1a;你要看一个英文视频&#xff0c;它可以帮助你将这个英文视频变为中文视频&#xff0c…

软件系统质量保证计划书

本计划描述了信息系统项目质量保证工作相关的一些情况&#xff0c;是软件质量保证过程和方针在项目中的具体实施计划。 计划中阐述了质量保证工作的基本目标&#xff1b;项目的基本情况&#xff1b;质量保证工作所需的资源&#xff1b;质量保证的主要工作&#xff1b;工作量估算…

postman转参的是“” mybatis将“”当0处理问题

Mybatis中 Integer 值为0时&#xff0c;默认为空字符串的解决办法-蒲公英云 传0当成了"" 解决&#xff1a; mybatis当传入数据类型为Int时并且值为0时,会判断为空字符串-腾讯云开发者社区-腾讯云 https://www.cnblogs.com/shenhaha520/articles/16301304.html 传…

试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) c#调用动态库是报错 目前平台改为x64

物业服务投诉反馈建议建议二维码

为高效处理物业方面的投诉问题&#xff0c;进一步提升居住品质。凡尔码平台推出“二维码”便民投诉、反馈方式&#xff0c;如有群租扰民、占用堵塞消防通道或私拉乱建等问题&#xff0c;可以立即扫码或进入“凡尔码”小程序进行投诉或反馈。 如电梯出现故障物业服务企业未及时维…

基于Java SSM框架实现咖啡馆管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现咖啡馆管理系统演示 摘要 2021是网络科技的时代 &#xff0c;众多的软件被开发出来&#xff0c;给客户带来了很大的选择余地&#xff0c;而且客户越来越追求更个性的需求。在这种时代背景下&#xff0c;客户对咖啡馆管理系统越来越重视&#xff0c;使更好…

深入理解qs库:简化你的工作流程

前言 在 vue 开发中&#xff0c;处理 url 查询字符串是一个常见的任务。qs 库是一个流行的工具&#xff0c;可以帮助我们轻松地处理 url 查询字符串的编码和解码。本文将介绍 qs 库的基本用法&#xff0c;并结合实例演示帮助你更好地理解和应用这个实用的工具。 一、qs 是什么&…

5. 结构型模式 - 外观模式

亦称&#xff1a; Facade 意图 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确…

Java容器学习,一文读懂Java容器使用知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

SOLIDWORKS Simulation有限元技巧:模拟放置物品时出现的误区

在solidworks simulation中&#xff0c;我们所知simulation能够对零部件和装配体进行有限元分析&#xff0c;而在这种情况下&#xff0c;为了简单分析&#xff0c;同时也为了减少不必要的运算&#xff0c;很多时候我们会选择对整个装配体或是零部件进行简化&#xff0c;如图二&…

免费分享一套Springboot+Vue前后端分离的个人博客系统,挺漂亮的

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue前后端分离的个人博客系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringbootVue个人博客系统 毕业设计 Java毕业设计_哔哩哔哩_bilibili【免费】SpringbootVue个人博客系统 毕业设计 …