栾城区城乡建设局网站wordpress本地怎么上传服务器

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

栾城区城乡建设局网站,wordpress本地怎么上传服务器,揭阳企业网站建设公司,wordpress弹出登录本博客纯属个人总结#xff0c;非原创。喜欢技术交流的#xff0c;可关注博主#xff0c;武汉有后端开发群#xff0c;可支持内推#xff0c;了解武汉行情等。 前沿 优惠卷平台项目的整体功能和模块#xff0c;以及每个功能点的技术选型和背后的依据。 搭建一个简化版的…本博客纯属个人总结非原创。喜欢技术交流的可关注博主武汉有后端开发群可支持内推了解武汉行情等。 前沿 优惠卷平台项目的整体功能和模块以及每个功能点的技术选型和背后的依据。 搭建一个简化版的营销优惠计算系统实现 优惠卷模版的创建用户领取优惠卷下单核销优惠卷订单价格计算等功能。 实现一个领取优惠卷的功能首先是要创建一个营销规则模版这个模版就像一个模具一样通过这个模具来铸造并最终发放到用户手中。 . 使用模版的好处是可以对优惠卷规则做一层抽象比如满减类打折类这些优惠卷是具体的优惠金额不同但是玩法类似。我们把相类似的玩法功能抽象成一个模版就可以简化具体优惠卷的创建和核销流程。 整个项目划分了优惠卷模版服务计算服务用户服务平台类组件 优惠卷模版服务模版规则是创建优惠卷的前置条件每种类型的模版都是一个计算公式这个公式约定了优惠计算的方式模版服务实现了模版规则的创建克隆分页查找等功能另外还可以在项目中定义满减随机立减满折晚间双倍优惠等多种卷模版类型。 计算服务根据用户购物车中的商品信息和优惠卷信息来计算当前订单优惠后的价格另外如果用户有多张优惠卷还提供了”优惠金额试算“帮助用户挑选最省钱的优惠卷。 用户服务暴露给外部用户使用的接口它依赖于模版服务计算服务为了完成底层逻辑主要业务场景是用户领卷订单价格试算下单核销订单金额等功能。 平台类组件包括一些与业务无关的中心化组件。 从整体来看模版服务和计算服务是基础服务用户服务是对用户开放的接口他依赖于模版服务计算服务来完成业务逻辑而平台类组件提供了横向的微服务特性支持比如微服务网关链路追踪等功能整体图如下
SpringCloud实战项目全景规划 第一阶段搭建基础的微服务功能实现微服务之间的通信第二阶段为各个模块构建服务容错分布式配置中心分布式链路追踪能力第三阶段进一步实现微服务网关消息驱动和分布式事务 第一阶段实现微服务通信 将用户微服务优惠卷模版服务和订单计算服务拆分为独立部署的业务系统通过注册中心来实现服务实现和服务发现。让各个微服务可以互相调用涉及到的技术nacos注册中心loadbalance负载均衡组件openFeign服务间调用。 nacos注册中心是注册中心组件负责收集所有服务节点的地址信息并维护服务注册表所有服务上线后都会向他汇报状态。loadbalance负载均衡在客户端发送服务调用的时候他会负责从nacos的注册表中挑选一台目标服务器。openFeign基于HTTP的远程服务调用让我们就像本地接口一样方便地发起远程服务调用。 为什么选择nacosloadbalance作为选型方案。 第一早期是eurekaribbon作为服务治理负载均衡组件但netfix正退出springcloud的历史舞台eurekaRibbon已经进入不维护状态(断更)在考虑技术选型时选择后劲更大更新最活跃的nacos和loadbalance组件。 服务治理服务治理的重点是搭建基础的跨服务调用功能把用户服务计算服务订单服务改造成可以独立启动的微服务并借助nacos的服务发现功能通过Webflux组件中的webClient实现基于HTTP的跨服务间的调用。 负载均衡 简化服务调用使用OpenFeign组件对用户服务进行改造将原先复杂的WebClient调用替换为简洁的OpenFeign调用。 第二阶段服务容错链路追踪分布式配置 利用服务容错提高微服务架构的可用性搭建全链路的分布式链路追踪能力实现统一的配置管理和动态属性推送涉及的组件nacos configSentinelSleuthZipkinElk。 在微服务架构中 服务容错保证高可用的重要手段推荐使用Sentinel作为容错组件可以实现降级熔断容量整形等多种服务容错途径。 后期会搭建Sentinel Dashboard控制台通过控制台将降级规则和流量整形规则应用到业务埋点中。 链路追踪推荐使用Sleuth组件线上异常排查全靠它使用全局唯一标记将跨微服务调用链上的各个环节全部串联起来结合Zipkin组件实现调用链的可视化检索将调用链上各个阶段的请求按顺序显示在页面上目前业界主流的ELK组合(es logstash kibana)作为日志检索系统。 “分布式配置”使用Nacos Config组件实现配置项的远程获取和动态推送。 第三阶段统一流量入口消息驱动分布式事务 流量入口采用Gateway担任路由转发同时它提供丰富的谓词组合实现复杂的路由判断逻辑可以在网关层定义拦截器做特殊处理。 消息驱动采用Stream 分布式事务Seata组件保证微服务环境下的事务一致性Seata分布式事务解决方案有两种第一没有代码侵入的Seata AT方案第二补偿性的Seata TCC方案。 项目细节 1对于境内电商行业来说金额往往是以分为单位的这样我们可以直接使用 Long 类型参与金额的计算比如 100 就代表 100 分也就是一块钱。这比使用 Double 到处转换 BigDecimal 省了很多事儿。 2尽可能减少级联配置用单表查询取而代之如果一个查询需要 join 好几张表最好的做法就通过重构业务逻辑来简化 DB 查询的复杂度。 3在做大型应用架构的时候我们通常会把计算密集型服务与 IO/ 存储密集型服务分割开来这样做的一个主要原因是提高资源利用率。 比如有两个计算密集型的微服务AIO密集型微服务B大促流量来时如果微服务A的压力比较大我们可以调配高性能CPU和内存去定向扩容A集群如果微服务B压力吃紧我们可以定向分配资源给B。 计算型不吃网络IO和磁盘空间主要占用CPU内存等资源。 微服务组件 服务治理 解决的首要任务就是服务注册服务发现通过这两项技术我们能让服务之间发起面对面的直接调用。 服务A怎么知道服务B中每台机器的地址呢 我们需要搭建一个中心化的服务注册中心服务B要将自己的信息添加到注册中心里服务A就能从注册中心获取到服务B的所有节点。 服务B集群向注册中心发起注册将自己的信息注册到注册中心这个过程就是服务注册。 每隔一段时间服务A就会从注册中心中获取服务B集群的服务列表这个过程叫服务发现。 最后服务A根据本地负载均衡策略从服务列表中选取某一个服务B的节点发起服务调用。 注册中心是一个中心化的信息管理者所有的微服务节点在启动后都会将自己的地址信息添加注册到注册中心在服务注册的过程中有两个关键信息很重要。 服务名称服务名称通常默认是spring.application.name属性在服务注册过程中我们必须将应用服务名上报到注册中心这样其他服务才能根据服务名找到对应的节点列表。地址信息包括服务节点的ip地址和端口。 容错机制 所有的服务都要在注册中心注册而且每个节点都需要每隔一段时间向注册中心同步自己当前的状态简称心跳。 如果节点持续发送心跳信息则一切正常如果注册中心有一段时间未收到心跳包则视为下线该服务从服务列表中剔除。 当服务节点关闭或重启的时会发送一条“服务下线”指令给注册中心也视为下线。 nacos体系架构 三个核心领域模式数据模型基本架构。 领域模型 Nacos的领域模型描述了服务与实例之间的边界和层级关系。Nacos的服务领域模型是以“服务”为维度来构建的。 这个服务并不是指集群中的单个服务器而是指微服务的服务名称。 服务集群实例是Nacos的核心概念。 服务 在服务的基础上可以配置元数据和服务保护阈值(0~1)等信息当服务的健康实例数/总比例数是小于保护阈值时说明当前服务还能提供的机器已经不多了Nacos会开启服务保护模式不再主动剔除服务实例。 集群 一个服务是由多个服务实例组成的在每个服务实例启动的时候可以设置它所属的集群可以配置元数据还可以为持久化节点设置健康检查模式。 实例 实例对应的就是服务节点我们可以通过Nacos控制台查看每个实例的IP地址和端口编辑实例的元数据信息修改它的上线/下线状态等。 上述都存在元数据它是包含了服务描述信息和自定义标签的数据集合。 数据模型 Namespace 命名空间他是最顶层的数据结构用来区分开发预发生产环境。 默认情况下所有的服务都部署到一个叫做“public”的公共命令空间。Group 在命名空间之下有一个分组结构。 默认情况下所有的服务都属于default_group这个分组不同分组间的微服务是相互隔离的。Data ID 在分组之下就是具体的微服务了比如订单服务商品服务等。 Nacos的基础架构 Nacos的两大核心Naming Service和Config Service
一致性 Nacos的一致性保证Nacos集群中各个节点之间的数据一致性。 侧重一致性的Raft协议基于集群中选举出来的Leader节点进行数据写入。临时节点的Distro协议他是最终一致性的分布式一致性协议。 自动装配原理 在早期SpringCloud版本中需要在启动类加上EnableDiscoveryClient注解才能开启服务治理功能。 在新版本中我们只需要通过配置项就可以开启。 NacosDiscoveryAutoConfiguration 服务发现的自动装配器。 主要是加载Nacos配置项申明NacosService Discovery类用作服务发现。 源码如下 Configuration(proxyBeanMethods false) ConditionalOnDiscoveryEnabled //默认是true可通过配置项制为false ConditionalOnNacosDiscoveryEnable //默认是true可通过配置项制为false public class NacosDiscoveryAutoConfiguration {//ConfigurationProperties(spring.cloud.nacos.discovery)//通过上面的注解读取配置文件中nacos相关的配置项封装进NacosDiscoveryProperties类BeanConditionalOnMissingBeanpublic NacosDiscoveryProperties nacosProperties() {return new NacosDiscoveryProperties();}//如下面代码NacosServiceDiscovery类BeanConditionalOnMissingBeanpublic NacosServiceDiscovery nacosServiceDiscovery(NacosDiscoveryProperties discoveryProperties,NacosServiceManager nacosServiceManager) {return new NacosServiceDiscovery(discoveryProperties, nacosServiceManager);} }//返回值根据服务名称获取所有已注册的服务返回所有服务的服务名称一般是给调用方使用的 //提供服务发现功能。 public class NacosServiceDiscovery {// 封装了Nacos配置项的类private NacosDiscoveryProperties discoveryProperties;// 另一个自动装配器声明的核心服务治理类private NacosServiceManager nacosServiceManager;// 根据服务名称获取所有已注册服务public ListServiceInstance getInstances(String serviceId) throws NacosException {String group discoveryProperties.getGroup();ListInstance instances namingService().selectInstances(serviceId, group,true);return hostToServiceInstanceList(instances, serviceId);}// 返回所有服务的服务名称public ListString getServices() throws NacosException {String group discoveryProperties.getGroup();ListViewString services namingService().getServicesOfServer(1,Integer.MAX_VALUE, group);return services.getData();}// 省略部分代码… }NacosServiceAutoConfiguration 声明核心服务治理类NacosServiceManager。 主要是通过serviceIdgroup等一系列获取已注册的服务列表。 NacosServiceRegistryAutoConfiguration Nacos服务注册的自动装配器。 关闭服务服务下线主要靠注解PreDestroy实现 NacosServiceRegistryAutoConfiguration-NacosAutoServiceRegistration-AbstractAutoServiceRegistration.destroy() Nacos服务发现底层实现 Nacos Client通过一种主动轮训的机制从nacos server获取服务注册信息包括地址列表group分组cluster名称等一系列数据。 Nacos Client会开启一个本地的定时任务每间隔一段时间就尝试从Nacos server查询服务注册表并将最新的注册信息更新到本地。 负责拉取服务的任务是UpdateTask类它实现了Runable方法Nacos以开启线程的方式调用了UpdateTask类中的run方法触发本地的服务发现查询请求。 首先在 spring.factory 文件中配置了 NacosDiscoveryClientConfiguration 类用于 springboot 的初始化时的自动装配。在 NacosDiscoveryClientConfiguration 类中会向 spring 容器中添加 NacosWatch 这个 bean。顺着 NacosWatch 的 start 方法一路往下就能看到NacosWatch#start -NacosNamingService#subscribe - HostReactor#subscribe - HostReactor#addTaskUpdateTask 就是作为 task 添加到定时执行队列里的。