当前位置: 首页 > news >正文

公司做网站哪里好做文学类网站后期花费

公司做网站哪里好,做文学类网站后期花费,椒江建设网保障性阳光工程网站,免费的招聘网站1、Seata是什么 Seata 是一款开源的分布式事务解决方案#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式#xff0c;为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS#x…1、Seata是什么 Seata 是一款开源的分布式事务解决方案致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTSGlobal Transaction Service 全局事务服务 官网https://seata.io/zh-cn/index.html 源码: https://github.com/seata/seata 官方Demo: https://github.com/seata/seata-samples seata版本v1.4.0 1.1 Seata的三大角色 在 Seata 的架构中一共有三个角色 TC (Transaction Coordinator) - 事务协调者维护全局和分支事务的状态驱动全局事务提交或回滚。TM (Transaction Manager) - 事务管理器定义全局事务的范围开始全局事务、提交或回滚全局事务。RM (Resource Manager) - 资源管理器管理分支事务处理的资源与TC交谈以注册分支事务和报告分支事务的状态并驱动分支事务提交或回滚。 其中TC 为单独部署的 Server 服务端TM 和 RM 为嵌入到应用中的 Client 客户端。 在 Seata 中一个分布式事务的生命周期如下 1、TM 请求 TC 开启一个全局事务。TC 会生成一个 XID 作为该全局事务的编号。XID会在微服务的调用链路中传播保证将多个微服务的子事务关联在一起。当一进入事务方法中就会生成XID global_table 就是存储的全局事务信息。 2、RM 请求 TC 将本地事务注册为全局事务的分支事务通过全局事务的 XID 进行关联。当运行数据库操作方法branch_table 存储事务参与者。 3、TM 请求 TC 告诉 XID 对应的全局事务是进行提交还是回滚。 4、TC 驱动 RM 们将 XID 对应的自己的本地事务进行提交还是回滚。 1.2 设计思路 AT模式的核心是对业务无侵入是一种改进后的两阶段提交其设计思路如图 第一阶段 业务数据和回滚日志记录在同一个本地事务中提交释放本地锁和连接资源。核心在于对业务sql进行解析转换成undolog并同时入库这是怎么做的呢先抛出一个概念DataSourceProxy代理数据源通过名字大家大概也能基本猜到是什么个操作后面做具体分析。 参考官方文档 https://seata.io/zh-cn/docs/dev/mode/at-mode.html 第二阶段 分布式事务操作成功则TC通知RM异步删除undolog。 分布式事务操作失败TM向TC发送回滚请求RM 收到协调器TC发来的回滚请求通过 XID 和 Branch ID 找到相应的回滚日志记录通过回滚记录生成反向的更新 SQL 并执行以完成分支的回滚。 整体执行流程 1.3 设计亮点 相比与其它分布式事务框架Seata架构的亮点主要有几个: 1、应用层基于SQL解析实现了自动补偿从而最大程度的降低业务侵入性 2、将分布式事务中TC事务协调者独立部署负责事务的注册、回滚 3、通过全局锁实现了写隔离与读隔离。 1.4 存在的问题 性能损耗 一条Update的SQL则需要全局事务xid获取与TC通讯、before image解析SQL查询一次数据库、after image查询一次数据库、insert undo log写一次数据库、before commit与TC通讯判断锁冲突这些操作都需要一次远程通讯RPC而且是同步的。另外undo log写入时blob字段的插入性能也是不高的。每条写SQL都会增加这么多开销,粗略估计会增加5倍响应时间。 性价比 为了进行自动补偿需要对所有交易生成前后镜像并持久化可是在实际业务场景下这个是成功率有多高或者说分布式事务失败需要回滚的有多少比率按照二八原则预估为了20%的交易回滚需要将80%的成功交易的响应时间增加5倍这样的代价相比于让应用开发一个补偿交易是否是值得 全局锁 热点数据 相比XASeata 虽然在一阶段成功后会释放数据库锁但一阶段在commit前全局锁的判定也拉长了对数据锁的占有时间这个开销比XA的prepare低多少需要根据实际业务场景进行测试。全局锁的引入实现了隔离性但带来的问题就是阻塞降低并发性尤其是热点数据这个问题会更加严重。 回滚锁释放时间 Seata在回滚时需要先删除各节点的undo log然后才能释放TC内存中的锁所以如果第二阶段是回滚释放锁的时间会更长。 死锁问题 Seata的引入全局锁会额外增加死锁的风险但如果出现死锁会不断进行重试最后靠等待全局锁超时这种方式并不优雅也延长了对数据库锁的占有时间。 2、Seata快速开始 2.1 Seata ServerTC环境搭建 https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html 步骤一下载安装包 https://github.com/seata/seata/releases Server端存储模式store.mode支持三种 file(默认)单机模式全局事务会话信息内存中读写并持久化本地文件root.data性能较高(默认db5.7高可用模式全局事务会话信息通过db共享相应性能差些 打开config/file.conf修改mode“db”修改数据库连接信息URL\USERNAME\PASSWORD)创建数据库seata_server新建表 可以去seata提供的资源信息中下载 点击查看\script\server\db\mysql.sql branch 表 存储事务参与者的信息 store { mode db db {## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.datasource druid## mysql/oracle/postgresql/h2/oceanbase etc.dbType mysqldriverClassName com.mysql.jdbc.Driverurl jdbc:mysql://192.168.65.220:3306/seata_serveruser rootpassword 123456minConn 5maxConn 30globalTable global_tablebranchTable branch_tablelockTable lock_tablequeryLimit 100maxWait 5000} }redisSeata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置适合当前场景的redis持久化配置 资源目录https://github.com/seata/seata/tree/1.3.0/script client : 存放client端sql脚本参数配置config-center: 各个配置中心参数导入脚本config.txt(包含server和client原名nacos-config.txt)为通用参数文件server: server端数据库脚本及各个容器配置 db存储模式Nacos(注册配置中心)部署 步骤五配置Nacos注册中心 负责事务参与者微服务 和TC通信 将Seata Server注册到Nacos修改conf目录下的registry.conf配置 然后启动注册中心Nacos Server #进入Nacos安装目录linux单机启动 bin/startup.sh -m standalone # windows单机启动 bin/startup.bat步骤六配置Nacos配置中心 注意如果配置了seata server使用nacos作为配置中心则配置信息会从nacos读取file.conf可以不用配置。 客户端配置registry.conf使用nacos时也要注意group要和seata server中的group一致默认group是DEFAULT_GROUP 获取/seata/script/config-center/config.txt修改配置信息 配置事务分组 要与客户端配置的事务分组一致 #my_test_tx_group需要与客户端保持一致 default需要跟客户端和registry.conf中registry中的cluster保持一致 客户端properties配置spring.cloud.alibaba.seata.tx‐service‐groupmy_test_tx_group 事务分组 异地机房停电容错机制 my_test_tx_group 可以自定义 比如guangzhou、shanghai… 对应的client也要去设置 seata.service.vgroup-mapping.projectAguangzhou default 必须要等于 registry.confi cluster “default” 配置参数同步到Nacos shell: sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca参数说明 -h: host默认值 localhost -p: port默认值 8848 -g: 配置分组默认值为 ‘SEATA_GROUP’ -t: 租户信息对应 Nacos 的命名空间ID字段, 默认值为空 ‘’ 精简配置 service.vgroupMapping.my_test_tx_groupdefault service.default.grouplist127.0.0.1:8091 service.enableDegradefalse service.disableGlobalTransactionfalse store.modedb store.db.datasourcedruid store.db.dbTypemysql store.db.driverClassNamecom.mysql.jdbc.Driver store.db.urljdbc:mysql://127.0.0.1:3306/seata?useUnicodetrue store.db.userroot store.db.passwordroot store.db.minConn5 store.db.maxConn30 store.db.globalTableglobal_table store.db.branchTablebranch_table store.db.queryLimit100 store.db.lockTablelock_table store.db.maxWait5000步骤七启动Seata Server 源码启动: 执行server模块下io.seata.server.Server.java的main方法命令启动: bin/seata-server.sh -h 127.0.0.1 -p 8091 -m db -n 1 -e test 启动Seata Server bin/seata-server.sh -p 8091 -n 1 bin/seata-server.sh -p 8092 -n 2 bin/seata-server.sh -p 8093 -n 3 启动成功默认端口8091 在注册中心中可以查看到seata-server注册成功 2.2 Seata Client快速开始 接入微服务应用 业务场景 用户下单整个业务逻辑由三个微服务构成 订单服务根据采购需求创建订单。库存服务对给定的商品扣除库存数量。 1) 启动Seata server端Seata server使用nacos作为配置中心和注册中心上一步已完成 2配置微服务整合seata 第一步添加pom依赖 !-- seata-- dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-seata/artifactId /dependency第二步 各微服务对应数据库中添加undo_log表 CREATE TABLE undo_log (id bigint(20) NOT NULL AUTO_INCREMENT,branch_id bigint(20) NOT NULL,xid varchar(100) NOT NULL,context varchar(128) NOT NULL,rollback_info longblob NOT NULL,log_status int(11) NOT NULL,log_created datetime NOT NULL,log_modified datetime NOT NULL,PRIMARY KEY (id),UNIQUE KEY ux_undo_log (xid,branch_id) ) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8;第三步修改register.conf,配置nacos作为registry.typeconfig.type对应seata server也使用nacos 注意需要指定group “SEATA_GROUP”因为Seata Server端指定了group “SEATA_GROUP” 必须保证一致 registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype nacosnacos {serverAddr localhostnamespace cluster defaultgroup SEATA_GROUP} } config {# file、nacos 、apollo、zk、consul、etcd3、springCloudConfigtype nacosnacos {serverAddr localhostnamespace group SEATA_GROUP} }如果出现这种问题 一般大多数情况下都是因为配置不匹配导致的 1.检查现在使用的seata服务和项目maven中seata的版本是否一致 2.检查tx-service-groupnacos.clusternacos.group参数是否和Seata Server中的配置一致 跟踪源码seata/discover包下实现了RegistryService#lookup用来获取服务列表 NacosRegistryServiceImpl#lookup 》String clusterName getServiceGroup(key); #获取seata server集群名称 》ListInstance firstAllInstances getNamingInstance().getAllInstances(getServiceName(), getServiceGroup(), clusters)第四步修改application.yml配置 配置seata 服务事务分组要与服务端nacos配置中心中service.vgroup_mapping的后缀对应 server:port: 8020spring:application:name: order-servicecloud:nacos:discovery:server-addr: 127.0.0.1:8848alibaba:seata:tx-service-group:my_test_tx_group # seata 服务事务分组datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/seata_order?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghaiusername: rootpassword: rootinitial-size: 10max-active: 100min-idle: 10max-wait: 60000pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: falsetest-on-return: falsestat-view-servlet:enabled: trueurl-pattern: /druid/*filter:stat:log-slow-sql: trueslow-sql-millis: 1000merge-sql: falsewall:config:multi-statement-allow: true第五步微服务发起者TM 方需要添加GlobalTransactional注解 Override //Transactional GlobalTransactional(namecreateOrder) public Order saveOrder(OrderVo orderVo){log.info(用户下单);log.info(当前 XID: {}, RootContext.getXID());// 保存订单Order order new Order();order.setUserId(orderVo.getUserId());order.setCommodityCode(orderVo.getCommodityCode());order.setCount(orderVo.getCount());order.setMoney(orderVo.getMoney());order.setStatus(OrderStatus.INIT.getValue());Integer saveOrderRecord orderMapper.insert(order);log.info(保存订单{}, saveOrderRecord 0 ? 成功 : 失败);//扣减库存storageFeignService.deduct(orderVo.getCommodityCode(),orderVo.getCount());//扣减余额accountFeignService.debit(orderVo.getUserId(),orderVo.getMoney());//更新订单Integer updateOrderRecord orderMapper.updateOrderStatus(order.getId(),OrderStatus.SUCCESS.getValue());log.info(更新订单id:{} {}, order.getId(), updateOrderRecord 0 ? 成功 : 失败);return order; }测试 分布式事务成功模拟正常下单、扣库存扣余额 分布式事务失败模拟下单扣库存成功、扣余额失败事务是否回滚
http://www.w-s-a.com/news/454384/

相关文章:

  • 龙岗商城网站建设教程百度关键词排名突然没了
  • 深圳网站建设服务哪家有织梦网站模板安装
  • 网站设计与网页制作代码大全网站开发还找到工作吗
  • 给设计网站做图会字体侵权吗站长工具seo综合查询张家界新娘
  • 网站的建设与颜色搭配win7在iis中新建一个网站
  • 单位做网站有哪些功能型类的网站
  • 网站怎样做优惠卷移动互联网开发培训
  • 重庆网站建设帝维科技网站做定向的作用
  • 网站建设工作室wp主题模板做污事网站
  • 网站建设 深圳 凡科重庆家居网站制作公司
  • 自己也可以免费轻松创建一个网站企业收录网站有什么用
  • 帮别人做网站违法导航网站开发工具
  • seo网站外包公司字画价格网站建设方案
  • 网站国内空间价格销售技巧
  • 广安建设企业网站qq互联网站备案号
  • 京东网站建设的要求vs2010做的网站
  • wordpress 新闻杂志主题佛山企业网站排名优化
  • 选服务好的网站建设金华市开发区人才网
  • 广州建站商城南阳高质量建设大城市网站
  • 网站建设合同封面模板做代炼的网站
  • 外贸网站建站要多少钱南昌优化排名推广
  • 做公司网站的尺寸一般是多大企业管理网站
  • 苏州网站设计公司兴田德润i简介做签证宾馆订单用啥网站
  • 网站页面设计工具做网站租空间
  • 做智能网站系统百度提交入口
  • 网站建设代理商电话网站规划和建设方案
  • 双桥区网站制作seo 首页
  • 电子商务网站建设前期准备wordpress域名指向二级目录
  • 汕头建站网站模板淮北做网站电话
  • 手机做logo用什么网站服务器安全防护