将遗留系统分解为微服务:第 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 exist
            if (patient == null || procedure == null)
            {
                throw new ArgumentNullException("Patient and Procedure must be provided.");
            }

            // Check if the feeSchedule exists
            if (feeSchedule == null)
            {
                throw new ArgumentNullException("FeeSchedule must be provided.");
            }

            // Calculate the expected reimbursement
            decimal expectedReimbursement = feeSchedule.Fee; // Basic reimbursement logic

            // You can add more complex reimbursement calculations here based on patient data and rules

            return expectedReimbursement;
        }
    }
}

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

3. 云端批处理

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

结论

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


作者:Greg Hall

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端学习——指令

vue作为前端框架&#xff0c;为了简化或实现一些特定功能&#xff0c;提供了很多指令&#xff0c;那什么是指令呢&#xff1f; 所谓的指令就是能够完成特定功能的一些vue语法&#xff0c;比如属性绑定指令v-bind&#xff0c;事件绑定指令v-on&#xff0c;循环指令v-for等。在v…

【Amazon 实验②】使用Amazon WAF做基础 Web Service 防护之自定义规则

文章目录 1. 自定义规则1.1 介绍 2. 实验步骤2.1 测试2.2 输出 上一篇章介绍了使用Amazon WAF做基础 Web Service 防护中的Web ACLs 配置 & AWS 托管规则的介绍和演示操作 【Amazon 实验①】使用Amazon WAF做基础 Web Service 防护&#xff0c;本篇章将继续介绍关于自定义…

2009-2022年31省细分产品出口数据/按hs码分的22类细分产品的出口数据

2009-2022年31省细分产品出口数据/按hs码分的22类细分产品的出口数据 1、时间&#xff1a;2009-2022年 2、指标&#xff1a;时间、流向名称、商品编码、商品名称、伙伴名称、主题编码、方式名称、金额&#xff08;美元&#xff09; 3、来源&#xff1a;海关贸易统计数据/海关…

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

[SQL]实验 视图和索引的应用

实验目的&#xff1a; [实验目的和要求] 1、掌握视图的创建、修改和重命名的方法 2、掌握视图中数据的操作 3、了解索引的作用 4、掌握索引的创建方法 实验步骤&#xff1a; 1、在销售管理数据库中&#xff0c;创建一个女职工视图&#xff0c;包括员工的编号、姓名、性别、雇佣…

多标签分类中常用指标和可视化例子

多标签分类中常用指标 1. 准确率&#xff08;Accuracy&#xff09; 准确率计算的是正确预测的标签比例。对于多标签分类&#xff0c;这通常是一个较为严格的指标&#xff0c;因为要求每个实例的所有标签都预测正确。 Accuracy 正确预测的标签数 总标签数 \text{Accuracy} \…

Qt前端技术:5.QSS

这个是表示QFrame中的pushButton中的子类和它子类的子类都将背景变为red 写成大于的时候表示只有直接的子类对象才会变 这个图中的QGroupBox和QPushButton都是QFrame的直接的子类 这个中的QGroupBox是QFrame的直接的子类但是QPushButton 是QGroupBox的子类&#xff0c;QPushB…

3. 结构型模式 - 组合模式

亦称&#xff1a; 对象树、Object Tree、Composite 意图 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们 问题 如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 …

基于JavaWeb的个人健康信息管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本个人健康信息管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

laravel 对接支付,本地穿透问题

本地穿透有好多工具&#xff0c;参考链接&#xff1a;https://zhuanlan.zhihu.com/p/339923535 我这边是用的 NATAPP 官网&#xff1a;https://natapp.cn/ 客户端下载&#xff1a;https://natapp.cn/# NATAPP1分钟快速新手图文教程&#xff1a;https://natapp.cn/article/n…

打造完美有声书体验,Audiobook Builder for Mac助您一键生成

在快节奏的生活中&#xff0c;有声书成为越来越多人追求放松与娱乐的方式。然而&#xff0c;找到合适的有声书却不容易&#xff0c;而Audiobook Builder for Mac正是为解决这个问题而诞生的完美解决方案。 Audiobook Builder for Mac是一款专业的有声书生成工具&#xff0c;它…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)ChannelMap 模块的实现

&#xff08;三&#xff09;ChannelMap 模块的实现 这个模块其实就是为Channel来服务的&#xff0c;前面讲了Channel这个结构体里边它封装了文件描述符。假如说我们得到了某一个文件描述符&#xff0c;需要基于这个文件描述符进行它对应的事件处理&#xff0c;那怎么办呢&…

【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)

深度解析OAuth2.0协议的原理和流程框架实现指南 背景介绍OAuth1.0协议访问令牌案例分析 OAuth2.0OAuth2.0与OAuth1.0 OAuth2.0协议体系的Roles角色OAuth定义了四个角色资源所有者资源服务器客户端授权服务器 传统的客户机-服务器身份验证模型的问题协议流程 认证授权类型授权码…

Spring中你应该要知道的initMethod

文章目录 功能源码 功能 之前的文章中由解析过PostConstruct/PreDestroy&#xff0c;他们也是initMethod的一种形式&#xff0c;注解方式是后来才加入的&#xff0c;在源码中他们的命名都是一样的名字&#xff0c;都叫initMethod&#xff0c;不过他们却是有着很大的差别&#…

Java期末复习题之GUI

点击返回标题->23年Java期末复习-CSDN博客 第1题. 一、利用Swing包创建一个窗口&#xff0c;窗口位置为(220,160)、大小为320240&#xff0c;并在窗口(20,80)、(120,80)、(220,80)处各设置一个按钮&#xff0c;按钮大小为80 X 40。 点击左按钮将窗口背景的红色分量增加10&am…

C++哈希表的实现

C哈希表的实现 一.unordered系列容器的介绍二.哈希介绍1.哈希概念2.哈希函数的常见设计3.哈希冲突4.哈希函数的设计原则 三.解决哈希冲突1.闭散列(开放定址法)1.线性探测1.动图演示2.注意事项3.代码的注意事项4.代码实现 2.开散列(哈希桶,拉链法)1.概念2.动图演示3.增容问题1.拉…

互联网+建筑工地源码,基于微服务+Java+Spring Cloud +Vue+UniApp开发

一、智慧工地概念 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;然后以物联网、移动互联网技术为基础&#xff0c;充分应用BIM、大数据、人工智能、移动通讯、云计算、物联网等信息技术&#xff0c;通过人机交互、感知、决策、执行和…

【YOLOV8预测篇】使用Ultralytics YOLO进行检测、分割、姿态估计和分类实践

目录 一 安装Ultralytics 二 使用预训练的YOLOv8n检测模型 三 使用预训练的YOLOv8n-seg分割模型 四 使用预训练的YOLOv8n-pose姿态模型 五 使用预训练的YOLOv8n-cls分类模型 <

序列化和反序列化对比分析,序列化和反序列化输出十个学生信息截图

序列化和反序列化是数据处理中的两个相对的概念&#xff0c;通常用于对象的存储和传输。下面是对这两个过程的对比分析&#xff1a; 序列化&#xff08;Serialization&#xff09; 定义 目的&#xff1a; 将对象的状态信息转换成可以存储或传输的形式&#xff08;如XML, JSO…

算数平均数、调和平均数、几何平均数的计算方法与应用场合

一 定义 1、算数平均数&#xff1a;又称均值&#xff0c;是统计学中最基本&#xff0c;最常用的一种平均指标&#xff0c;分为简单算术平均数、加权算术平均数。 2、调和平均数&#xff1a;又称倒数平均数&#xff0c;是总体各统计变量倒数的算数平均数的倒数。分为数学调和平…