1.13个免费的源码开源GIS软件
2.初识Seata
3.阿里开源分布式事务框架seata落地实践
13个免费的开源GIS软件
QGIS
QGIS是一个开源GIS软件,诞生于年,源码旨在让GIS成为个人电脑用户的源码可行选项。它支持Unix、源码Windows和macOS平台,源码使用Qt工具包和c++开发,源码好看官网源码具备清爽、源码易用的源码GUI,提供强大GIS功能。源码QGIS支持多种栅格和矢量数据格式,源码并可通过插件轻松扩展支持新格式。源码
gVSIG
gVSIG是源码一个功能强大且易于使用的GIS系统,被全球数万用户使用。源码它支持多种格式、源码矢量和栅格数据,源码提供文件、数据库和远程服务管理工具。gvSIG desktop易于扩展,允许为定制解决方案开发应用程序和持续改进。它在GNU/GPL许可下免费使用。
Whitebox GAT
Whitebox GAT是一个开源、跨平台GIS和遥感软件包,支持高级GIS分析和数据可视化。它具有友好的GUI,内置多个分析工具帮助和文件。未央源码用户可访问离线和在线帮助资源,支持激光雷达数据处理和可扩展性,允许用户使用任何JVM语言创建自定义工具或插件。
SAGA GIS
SAGA GIS是一个用于空间数据编辑的开源GIS系统,最初由德国哥廷根大学团队开发,现由国际开发者社区维护。它旨在为地球科学研究提供有效且易学的平台,通过API实现。SAGA包含快速发展的地球科学工具模块库。
GRASS GIS
GRASS GIS是一个免费、开源的GIS系统,用于处理栅格、拓扑矢量、影像和图表数据。它在GPL下发布,可在Mac OS X、Windows和Linux上运行。用户可通过GUI或命令行使用其功能,支持多种栅格和矢量格式,具备高级矢量图形数据和立体像素可视化能力。
MapWindow
MapWindow GIS是一个开源GIS应用程序,是一组可编程的映射组件,被美国环境保护署作为流域分析建模的主要GIS平台。
ILWIS
ILWIS是cep 源码一种用于矢量和栅格处理的开源GIS和遥感软件,提供数字化、编辑、数据分析和地图制作功能。它最初由荷兰ITC Enschede开发,自年起作为自由软件发布。ILWIS具有强大的栅格分析模块、矢量点数字化工具、实用工具和用户指南,适用于学生、教师和研究人员。
GeoDa
GeoDa是一个开源软件包,用于空间数据分析、地理可视化、空间自相关和空间建模。它具有强大的空间分析、多元探索性数据分析和全局/局部空间自相关能力,执行线性回归,并支持空间滞后模型和空间误差模型。
uDig
uDig是一个社区开发的GIS软件,基于Eclipse平台,具有完整的分层开放源码GIS。它是用Java编写的,支持GRASS进行复杂矢量运算,并可嵌入JGRASS和专业水文工具,tar源码支持多种数据源。
OpenJump
JUMP是一个基于Java的矢量光栅GIS和编程框架。
Diva GIS
DIVA-GIS是一个免费的GIS软件程序,用于分析地理数据,特别是生物多样性的点数据。
FalconView
FalconView是一个地图系统,最初为Windows系列操作系统开发,支持多种地图和地理相关覆盖,主要用于军事任务规划。
OrbisGIS
OrbisGIS是一个开源纯Java GIS应用程序,用于读写矢量和栅格数据、创建专题地图和处理数据。
初识Seata
Seata是一种分布式事务解决方案,由蚂蚁金服和阿里巴巴在年1月开源。它旨在提供高性能和易于使用的分布式事务服务,为用户提供一站式的解决方案。
Seata官网提供详细的文档和播客,涵盖了使用说明和源码分析等内容。架构上,Seata由三个关键角色组成,其总体架构如图所示。Seata提供四种分布式事务解决方案,每一个都离不开TC,即事务协调者。arrayadapter 源码
部署TC服务时,可参考博主之前的文章,链接如下。微服务集成Seata时,以order-service为例进行演示。首先,需要在order-service中引入依赖。接着,在application.yml中配置TC服务信息,通过注册中心nacos结合服务名称获取TC地址。微服务如何找到TC的地址,我们知道注册到Nacos中的微服务确定一个实例需要四个信息,这些信息在配置文件中都能找到。
配置完成后,其他服务按照类似步骤进行。接下来,我们学习Seata中的四种事务模式。首先介绍的是XA模式,它是X/Open组织定义的分布式事务处理标准。Seata对原始的XA模式做了封装和改造,基本架构如图所示。在AT模式中,我们弥补了XA模式中资源锁定周期过长的缺陷。AT模式下,当前分支事务执行流程分为两个阶段,一阶段RM的工作包括注册分支事务到TC、执行分支业务SQL但不提交以及报告执行状态到TC。二阶段TC和RM的工作分别包括TC通知事务结束、TC检查分支事务状态和RM在提交或回滚时的工作。
在AT模式下,我们通过一个真实的业务来梳理其原理。接着,我们简述了AT模式与XA模式最大的区别,并讨论了脏写问题及其解决思路。AT模式的优点在于不锁数据库,缺点是需要额外的表记录全局锁和数据快照。实现AT模式时,需要导入数据库表,记录全局锁和数据快照,并在application.yml文件中修改事务模式。
在TCC模式中,每一个阶段都是独立事务,通过人工编码来实现数据恢复。我们通过一个例子来分析TCC模式的流程,包括初始余额、冻结操作、提交操作和回滚操作。Seata中的TCC模型依然沿用事务架构。TCC模式的每个阶段分别对应正向操作和逆向回滚操作,优点是支持复杂业务场景,缺点是需要实现额外的逻辑。实现TCC模式时,需要定义状态表并改造服务,声明TCC接口和编写实现类。
Saga模式是Seata即将开源的长事务解决方案,基于Hector & Kenneth在年的论文Sagas。在Saga模式下,分布式事务内有多个参与者,每一个参与者都是一个冲正补偿服务。Saga也分为两个阶段,优点是可以处理复杂的业务场景,缺点是实现复杂。我们通过对比四种实现方式来了解其特点。
Seata的TC服务作为分布式事务的核心,必须保证集群的高可用性。搭建TC服务集群很简单,只需启动多个TC服务并注册到nacos。为了确保安全性,一般会实现异地多机房容灾,例如在上海和杭州分别部署TC集群。微服务基于事务组与TC集群的映射关系查找当前使用的TC集群,当集群出现故障时,通过修改映射关系实现集群切换。
实现高可用的具体步骤和链接请参考相关文档。希望这些内容能帮助您更好地理解Seata和分布式事务。如果您有任何疑问,欢迎访问博主的个人开源博客地址: chengke.net。
阿里开源分布式事务框架seata落地实践
seata是阿里巴巴研发的分布式事务框架,提供AT、TCC、SAGA和XA事务模式。本文以物流后台服务为例,介绍了seata框架的落地实践,包括遇到的问题与解决方案。有道精品课教务系统采用springcloud构建分布式集群服务,存在分布式事务需求。seata框架能实现全局事务,并满足业务需求,灵活兼容多种事务模式,确保数据强一致性。物流业务案例展示了seata框架落地过程及问题解决办法,供读者学习讨论。
物流业务案例中,seata框架由三个组件构成:全局事务状态维护、全局事务范围定义及分支事务管理。seata服务端部署采用解压并执行bin/seata-server.sh启动,配置文件registry.conf与file.conf决定注册中心和配置信息获取方式。使用consul做注册中心,需在registry.conf中修改配置。需确保global_table、branch_table和lock_table在数据库中预建。
客户端配置包括引入seata组件、配置file.conf和registry.conf文件,并在application.yml添加seata配置。此外,替换项目数据源以完成客户端配置。分布式事务分为AT和TCC模式,分别基于本地ACID事务和自定义分支事务管理。TCC模式需定义服务接口和上下文,实现分支事务逻辑。
在实际部署中,常遇到client TM/RM注册TC失败问题,需确保seata项目正确部署到线上环境。高可用部署依赖注册中心模式,需将file.conf信息存至consul。解决namespace支持问题,需修改源码中的Configuration和RegistryProvider接口实现类。全局日志插入问题需调整seata数据源连接部分代码。
利用SPI机制实现自定义组件,seata提供SPI服务发现机制,允许在服务间通过接口调用服务,避免耦合。通过修改ConsulRegistryProvider类并更新META-INF/services目录,可替换seata实现类。为简化配置,可将自定义实现类和公共client配置封装到common-seata工具包中。
物流场景中,通过引入common-seata工具包,实现基于TCC的全局事务链路。当执行成功,可在server端查看日志;若执行失败,进行回滚以删除生成的单据。
本文总结了seata框架部署与使用的关键步骤和技术细节,针对项目落地遇到的技术问题提供了解决方案。后续文章将继续深入seata实现分布式事务的核心原理和技术细节。文章由有道技术团队邓新伟撰写,已获作者授权。