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

有哪些免费做简历的网站网站建设太金手指六六二八

有哪些免费做简历的网站,网站建设太金手指六六二八,ngrok WordPress,大连建设网官网首页CircuitBreaker断路器 “断路器”本身是一种开关装置#xff0c;当某个服务单元发生故障之后#xff0c;通过断路器的故障监控#xff08;类似熔断保险丝#xff09;#xff0c;向调用方返回一个符合预期的、可处理的备选响应(FallBack)#xff0c;而不是长时间的等待或…CircuitBreaker断路器 “断路器”本身是一种开关装置当某个服务单元发生故障之后通过断路器的故障监控类似熔断保险丝向调用方返回一个符合预期的、可处理的备选响应(FallBack)而不是长时间的等待或者抛出调用方无法处理的异常这样就保证了服务调用方的线程不会被长时间、不必要地占用从而避免了故障在分布式系统中的蔓延乃至雪崩。 CircuitBreaker的目的是保护分布式系统免受故障和异常提高系统的可用性和健壮性。 当一个组件或服务出现故障时CircuitBreaker会迅速切换到开放OPEN状态(保险丝跳闸断电)阻止请求发送到该组件或服务从而避免更多的请求发送到该组件或服务。这可以减少对该组件或服务的负载防止该组件或服务进一步崩溃并使整个系统能够继续正常运行。同时CircuitBreaker还可以提高系统的可用性和健壮性因为它可以在分布式系统的各个组件之间自动切换从而避免单点故障的问题。 CircuitBreaker只是一套规范接口落地实现者是Resilience4j。 Resilience4j resilience4j是一个专为函数式编程设计的轻量级容错库Resilience4j提供高阶函数装饰器以通过断路器、速率限制器、重试或隔板增强任何功能接口、lambda表达式或方法引用。可以在任何函数式接口、lambda表达式或方法引用上堆叠多个装饰器。 Resilience4j服务熔断和服务降级 断路器 断路器有三个普通状态关闭closed、开启open、半开half_open还有两个特殊状态禁用disabled、强制开启的Forced_open当熔断器关闭时所有的请求都会通过熔断器。 当失败率超过一定的阈值熔断器就会从关闭状态转换到打开状态这时所有的请求都会被拒绝。当经过一段时间后熔断器会从打开状态转换到半开状态这时仅有一定数量的请求会被放入并重新计算失败率如果失败率超过阈值则变为打开状态如果失败率低于阈值则变为关闭状态。断路器使用滑动窗口来存储和统计调用的结果。可以选择基于调动数量的滑动窗口或者基于时间的滑动窗口。 基于访问数量的滑动窗口统计了最近n秒的调用返回结果。除此之外熔断器还会有两种特殊状态disabled始终允许访问和forced_open始终拒绝访问。 这两个状态不会生成熔断器事件除状态转换外并且不会记录事件的成功与失败。退出这两个状态的唯一方法是触发状态转换或者重置熔断器。 断路器配置 常用的几个配置 配置属性默认值描述failureRateThreshold50以百分比配置失败率阈值。当失败率等于或者大于阈值时断路器状态变关闭为开启并进行服务降级slowCallRateThreshold100以百分比的方式配置断路器把调用时间大于slowCallRateThreshold的调用视为慢调用当慢调用比例大于或者等于阈值时断路器开启并进行服务降级。slowCallDurationThreshold60000ms毫秒配置调用时间的阈值高于该阈值的呼叫被视为慢调用并增加慢调用比例。permittedNumberOfCallsInHalfOpenState10断路器在半开的状态下允许通过的调用次数minimunNumberOfCalls100在每个滑动窗口期样本数配置断路器计算错误率或者慢调用率的最小调用数。比如设置为5意味着在计算故障率之前必须至少调用5次。如果只记录了4次即使4次都失败了断路器也不会进入到打开状态。waitDurationInOpenState60000ms毫秒从OPEN到HALF_OPEN状态需要等待的时间slidingWindowTypeCOUNT_BASED断路器的滑动窗口期类型。可以基于“次数”COUNT_BASED或者“时间”TIME_BASED进行熔断默认是COUNT_BASED。 若为COUNT_BASED则10次调用中有50%失败即5次打开熔断断路器若为TIME_BASED则此时还有额外的两个设置属性含义为在N秒内sliding-window-size100%slow-call-rate-threshold的请求超过N秒slow-call-duration-threshold打开断路器。slidingWindowSize100配置滑动窗口的大小 案例按照COUNT_BASED计数的滑动窗口 服务客户端的模块pom文件引入依赖 !--resilience4j-circuitbreaker-- dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-circuitbreaker-resilience4j/artifactId /dependency !-- 由于断路保护等需要AOP实现所以必须导入AOP包 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId /dependency在yaml文件中要操作两步一是spring的配置中 开启circuitbreaker和分组激活spring.cloud.openfeign.circuitbreaker.enabled二是配置Resilience4j的配置信息 整体配置文件如下 server:port: 80spring:application:name: cloud-consumer-openfeign-order####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}openfeign:client:config:default:connect-timeout: 3000read-timeout: 3000cloud-provider-payment:#连接超时时间connectTimeout: 5000#读取超时时间readTimeout: 5000httpclient:hc5:enabled: truecompression:request:enabled: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true# 开启circuitbreaker和分组激活 spring.cloud.openfeign.circuitbreaker.enabledcircuitbreaker:enabled: truegroup:enabled: true #没开分组永远不用分组的配置。精确优先、分组次之(开了分组)、默认最后 logging:level:com:ergou:cloud:apis:PayFeignApi: debug# Resilience4j CircuitBreaker 按照次数COUNT_BASED 的例子 # 6次访问中当执行方法的失败率达到50%时CircuitBreaker将进入开启OPEN状态(保险丝跳闸断电)拒绝所有请求。 # 等待5秒后CircuitBreaker 将自动从开启OPEN状态过渡到半开HALF_OPEN状态允许一些请求通过以测试服务是否恢复正常。 # 如还是异常CircuitBreaker 将重新进入开启OPEN状态如正常将进入关闭CLOSE闭合状态恢复正常处理请求。 resilience4j:circuitbreaker:configs:default:failureRateThreshold: 50 #设置50%的调用失败时打开断路器超过失败请求百分⽐CircuitBreaker变为OPEN状态。slidingWindowType: COUNT_BASED # 滑动窗口的类型slidingWindowSize: 6 #滑动窗⼝的⼤⼩配置COUNT_BASED表示6个请求配置TIME_BASED表示6秒minimumNumberOfCalls: 6 #断路器计算失败率或慢调用率之前所需的最小样本(每个滑动窗口周期)。如果minimumNumberOfCalls为10则必须最少记录10个样本然后才能计算失败率。如果只记录了9次调用即使所有9次调用都失败断路器也不会开启。automaticTransitionFromOpenToHalfOpenEnabled: true # 是否启用自动从开启状态过渡到半开状态默认值为true。如果启用CircuitBreaker将自动从开启状态过渡到半开状态并允许一些请求通过以测试服务是否恢复正常waitDurationInOpenState: 5s #从OPEN到HALF_OPEN状态需要等待的时间permittedNumberOfCallsInHalfOpenState: 2 #半开状态允许的最大请求数默认值为10。在半开状态下CircuitBreaker将允许最多permittedNumberOfCallsInHalfOpenState个请求通过如果其中有任何一个请求失败CircuitBreaker将重新进入开启状态。recordExceptions:- java.lang.Exceptioninstances:cloud-payment-service:baseConfig: default服务客户端的模块的controller RestController public class OrderCircuitController {Resourceprivate PayFeignApi payFeignApi;GetMapping(value /feign/pay/circuit/{id})CircuitBreaker(name cloud-payment-service, fallbackMethod myCircuitFallback)public String myCircuitBreaker(PathVariable(id) Integer id){return payFeignApi.myCircuit(id);}//myCircuitFallback就是服务降级后的兜底处理方法public String myCircuitFallback(Integer id,Throwable t) {// 这里是容错处理逻辑返回备用结果return myCircuitFallback系统繁忙请稍后再试-----/(ㄒoㄒ)/~~;} }案例按照TIME_BASED时间的滑动窗口 yaml文件的配置改为 server:port: 80spring:application:name: cloud-consumer-openfeign-order####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}openfeign:client:config:default:connect-timeout: 3000read-timeout: 3000cloud-provider-payment:#连接超时时间connectTimeout: 5000#读取超时时间readTimeout: 5000httpclient:hc5:enabled: truecompression:request:enabled: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true# 开启circuitbreaker和分组激活 spring.cloud.openfeign.circuitbreaker.enabledcircuitbreaker:enabled: truegroup:enabled: true #没开分组永远不用分组的配置。精确优先、分组次之(开了分组)、默认最后 logging:level:com:ergou:cloud:apis:PayFeignApi: debug# Resilience4j CircuitBreaker 按照时间TIME_BASED 的例子 resilience4j:timelimiter:configs:default:timeout-duration: 10s #神坑的位置timelimiter 默认限制远程1s超于1s就超时异常配置了降级就走降级逻辑circuitbreaker:configs:default:failureRateThreshold: 50 #设置50%的调用失败时打开断路器超过失败请求百分⽐CircuitBreaker变为OPEN状态。slowCallDurationThreshold: 2s #慢调用时间阈值高于这个阈值的视为慢调用并增加慢调用比例。slowCallRateThreshold: 30 #慢调用百分比峰值断路器把调用时间⼤于slowCallDurationThreshold视为慢调用当慢调用比例高于阈值断路器打开并开启服务降级slidingWindowType: TIME_BASED # 滑动窗口的类型slidingWindowSize: 2 #滑动窗口的大小配置配置TIME_BASED表示2秒minimumNumberOfCalls: 2 #断路器计算失败率或慢调用率之前所需的最小样本(每个滑动窗口周期)。permittedNumberOfCallsInHalfOpenState: 2 #半开状态允许的最大请求数默认值为10。waitDurationInOpenState: 5s #从OPEN到HALF_OPEN状态需要等待的时间recordExceptions:- java.lang.Exceptioninstances:cloud-payment-service:baseConfig: default 建议使用COUNT_BASED的方式 Resilience4j舱壁隔离BulkHead 舱壁隔离依赖隔离负载保护用来限制对于下游服务的最大并发数量的限制。 Resilience提供了两种隔离的实现方式可以限制并发执行的数量 SemaphoreBulkhead使用了信号量FixedThreadPoolBulkhead使用了有界队列和固定大小线程池 SemaphoreBulkhead信号量舱壁 原理 当信号量有空闲时进入系统的请求会直接获取信号量并开始业务处理。 当信号量全被占用时接下来的请求将会进入阻塞状态SemaphoreBulkhead提供了一个阻塞计时器 如果阻塞状态的请求在阻塞计时内无法获取到信号量则系统会拒绝这些请求。 若请求在阻塞计时内获取到了信号量那将直接获取信号量并执行相应的业务处理。 使用步骤 在服务客户端的pom中引入依赖 !--resilience4j-bulkhead-- dependencygroupIdio.github.resilience4j/groupIdartifactIdresilience4j-bulkhead/artifactId /dependencyyaml文件 属性配置 maxConcurrentCalls舱壁允许的最大并行执行量默认值是25 maxWaitDuration尝试进入饱和舱壁时应阻塞线程的最长时间默认值是0 在配置文件下方配置 server:port: 80spring:application:name: cloud-consumer-openfeign-order####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}openfeign:client:config:default:connect-timeout: 3000read-timeout: 3000cloud-provider-payment:#连接超时时间connectTimeout: 5000#读取超时时间readTimeout: 5000httpclient:hc5:enabled: truecompression:request:enabled: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true# 开启circuitbreaker和分组激活 spring.cloud.openfeign.circuitbreaker.enabledcircuitbreaker:enabled: truegroup:enabled: true #没开分组永远不用分组的配置。精确优先、分组次之(开了分组)、默认最后 logging:level:com:ergou:cloud:apis:PayFeignApi: debug# Resilience4j CircuitBreaker 按照次数COUNT_BASED 的例子 # 6次访问中当执行方法的失败率达到50%时CircuitBreaker将进入开启OPEN状态(保险丝跳闸断电)拒绝所有请求。 # 等待5秒后CircuitBreaker 将自动从开启OPEN状态过渡到半开HALF_OPEN状态允许一些请求通过以测试服务是否恢复正常。 # 如还是异常CircuitBreaker 将重新进入开启OPEN状态如正常将进入关闭CLOSE闭合状态恢复正常处理请求。 resilience4j:circuitbreaker:configs:default:failureRateThreshold: 50 #设置50%的调用失败时打开断路器超过失败请求百分⽐CircuitBreaker变为OPEN状态。slidingWindowType: COUNT_BASED # 滑动窗口的类型slidingWindowSize: 6 #滑动窗⼝的⼤⼩配置COUNT_BASED表示6个请求配置TIME_BASED表示6秒minimumNumberOfCalls: 6 #断路器计算失败率或慢调用率之前所需的最小样本(每个滑动窗口周期)。如果minimumNumberOfCalls为10则必须最少记录10个样本然后才能计算失败率。如果只记录了9次调用即使所有9次调用都失败断路器也不会开启。automaticTransitionFromOpenToHalfOpenEnabled: true # 是否启用自动从开启状态过渡到半开状态默认值为true。如果启用CircuitBreaker将自动从开启状态过渡到半开状态并允许一些请求通过以测试服务是否恢复正常waitDurationInOpenState: 5s #从OPEN到HALF_OPEN状态需要等待的时间permittedNumberOfCallsInHalfOpenState: 2 #半开状态允许的最大请求数默认值为10。在半开状态下CircuitBreaker将允许最多permittedNumberOfCallsInHalfOpenState个请求通过如果其中有任何一个请求失败CircuitBreaker将重新进入开启状态。recordExceptions:- java.lang.Exceptioninstances:cloud-payment-service:baseConfig: default#舱壁隔离的配置信息bulkhead:configs:default:maxConcurrentCalls: 2 # 隔离允许并发线程执行的最大数量maxWaitDuration: 1s # 当达到并发调用数量时新的线程的阻塞时间我只愿意等待1秒过时不候进舱壁兜底fallbackinstances:cloud-payment-service:baseConfig: defaultcontroller类 /***(船的)舱壁,隔离 信息量舱壁demo* param id* return*/GetMapping(value /feign/pay/bulkhead/{id})Bulkhead(name cloud-payment-service,fallbackMethod myBulkheadFallback,type Bulkhead.Type.SEMAPHORE)public String myBulkhead(PathVariable(id) Integer id){return payFeignApi.myBulkhead(id);}public String myBulkheadFallback(Throwable t){return myBulkheadFallback隔板超出最大数量限制系统繁忙请稍后再试-----/(ㄒoㄒ)/~~;}FixedThreadPoolbulkhead固定线程池 FixedThreadPoolBulkhead的功能与SemaphoreBulkhead一样也是用于限制并发执行的次数的但是二者的实现原理存在差别而且表现效果也存在细微的差别。FixedThreadPoolBulkhead使用一个固定线程池和一个等待队列来实现舱壁。 当线程池中存在空闲时则此时进入系统的请求将直接进入线程池开启新线程或使用空闲线程来处理请求。 当线程池中无空闲时时接下来的请求将进入等待队列 若等待队列仍然无剩余空间时接下来的请求将直接被拒绝 在队列中的请求等待线程池出现空闲时将进入线程池进行业务处理。 另外ThreadPoolBulkhead只对CompletableFuture方法有效所以我们必创建返回CompletableFuture类型的方法 配置项 maxThreadPoolSize配置最大线程池的大小默认值是Runtime.getRuntime().availableProcessorscoreThreadPoolSize配置核心线程池的大小默认值是Runtime.getRuntime().availableProcessors - 1queueCapacity配置队列的容量默认值是100keepAliveDuration当线程数大于核心数时这是多余空闲线程在终止前等待新任务的最长时间默认值是20ms 使用步骤 pom引入依赖依赖也是同上方的信号舱舱壁隔离的一样的见上yaml文件服务客户端的模块 server:port: 80spring:application:name: cloud-consumer-openfeign-order####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}openfeign:client:config:default:connect-timeout: 3000read-timeout: 3000cloud-provider-payment:#连接超时时间connectTimeout: 5000#读取超时时间readTimeout: 5000httpclient:hc5:enabled: truecompression:request:enabled: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true# 开启circuitbreaker和分组激活 spring.cloud.openfeign.circuitbreaker.enabledcircuitbreaker:enabled: true # group: #当要使用固定线程池舱壁的时候要设置为false或者直接注释掉 # enabled: true #没开分组永远不用分组的配置。精确优先、分组次之(开了分组)、默认最后 logging:level:com:ergou:cloud:apis:PayFeignApi: debug# Resilience4j CircuitBreaker 按照次数COUNT_BASED 的例子 # 6次访问中当执行方法的失败率达到50%时CircuitBreaker将进入开启OPEN状态(保险丝跳闸断电)拒绝所有请求。 # 等待5秒后CircuitBreaker 将自动从开启OPEN状态过渡到半开HALF_OPEN状态允许一些请求通过以测试服务是否恢复正常。 # 如还是异常CircuitBreaker 将重新进入开启OPEN状态如正常将进入关闭CLOSE闭合状态恢复正常处理请求。 resilience4j:circuitbreaker:configs:default:failureRateThreshold: 50 #设置50%的调用失败时打开断路器超过失败请求百分⽐CircuitBreaker变为OPEN状态。slidingWindowType: COUNT_BASED # 滑动窗口的类型slidingWindowSize: 6 #滑动窗⼝的⼤⼩配置COUNT_BASED表示6个请求配置TIME_BASED表示6秒minimumNumberOfCalls: 6 #断路器计算失败率或慢调用率之前所需的最小样本(每个滑动窗口周期)。如果minimumNumberOfCalls为10则必须最少记录10个样本然后才能计算失败率。如果只记录了9次调用即使所有9次调用都失败断路器也不会开启。automaticTransitionFromOpenToHalfOpenEnabled: true # 是否启用自动从开启状态过渡到半开状态默认值为true。如果启用CircuitBreaker将自动从开启状态过渡到半开状态并允许一些请求通过以测试服务是否恢复正常waitDurationInOpenState: 5s #从OPEN到HALF_OPEN状态需要等待的时间permittedNumberOfCallsInHalfOpenState: 2 #半开状态允许的最大请求数默认值为10。在半开状态下CircuitBreaker将允许最多permittedNumberOfCallsInHalfOpenState个请求通过如果其中有任何一个请求失败CircuitBreaker将重新进入开启状态。recordExceptions:- java.lang.Exceptioninstances:cloud-payment-service:baseConfig: default#舱壁隔离的配置信息 # bulkhead: # configs: # default: # maxConcurrentCalls: 2 # 隔离允许并发线程执行的最大数量 # maxWaitDuration: 1s # 当达到并发调用数量时新的线程的阻塞时间我只愿意等待1秒过时不候进舱壁兜底fallback # instances: # cloud-payment-service: # baseConfig: default#固定线程池舱壁隔离thread-pool-bulkhead:configs:default:core-thread-pool-size: 1max-thread-pool-size: 1queue-capacity: 1instances:cloud-payment-service:baseConfig: default # timelimiter: # configs: # default: # timeout-duration: 10s controller GetMapping(value /feign/pay/bulkhead/{id})Bulkhead(name cloud-payment-service,fallbackMethod myBulkThreadPoolHeadFallback,type Bulkhead.Type.THREADPOOL)public CompletableFutureString myBulkheadThreadPool(PathVariable(id) Integer id){return CompletableFuture.supplyAsync(() - payFeignApi.myBulkhead(id) \\tThreadPool);}public CompletableFutureString myBulkThreadPoolHeadFallback(Throwable t){return CompletableFuture.supplyAsync(() - (固定线程池舱壁隔离)隔板超出最大数量限制系统繁忙请稍后再试-----/(ㄒoㄒ)/~~);}Resilience4j限流RateLimiter 限流就是限制最大访问量。系统能提供的最大并发是有限制的同时来的请求太多了就需要限流。 也就是通过对并发访问/请求进行限速或者对一个时间窗口内的请求进行限速以保护应用系统一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。 常见限流算法 漏斗算法让请求像水流过漏斗一样请求的处理效率是固定的来不及处理的请求在“漏斗”中等待。漏斗算法对于存在突发特性的流量来说缺乏效率。令牌桶算法准备一定的令牌数请求通过时如果令牌有剩余该请求就领取一个令牌并进入处理处理完后释放令牌。没有令牌剩余的时候就是到等待队列中等待令牌。这种方法是SpringCloud默认使用的算法。滚动时间窗取一段时间内允许固定数量的请求进入如果这段时间内超过该固定数量就拒绝或者排队等下一个时间段进入。但是间隔临界的一段时间内的请求超过系统限制可能导致系统被压垮。滑动时间窗滑动事件窗口是把固定时间片段进行划分并且随着时间移动移动方式为开始时间点变为时间列表中的第二个时间点结束时间点增加一个时间点不断重复。达到一种滑片滑动的效果。 配置项 timeoutDuration线程等待权限的默认等待时间默认是五秒钟limitRefreshPeriod限流器每隔limitRefreshPeriod刷新一次将允许处理的最大请求数量重置为limitForPeriod默认是500纳秒limitForPeriod在一次刷新周期内允许执行的最大请求数默认是50 使用步骤 pom文件中引入依赖 !--resilience4j-ratelimiter-- dependencygroupIdio.github.resilience4j/groupIdartifactIdresilience4j-ratelimiter/artifactId /dependencyyaml文件 ####resilience4j ratelimiter 限流的例子 resilience4j:ratelimiter:configs:default:limitForPeriod: 2 #在一次刷新周期内允许执行的最大请求数limitRefreshPeriod: 1s # 限流器每隔limitRefreshPeriod刷新一次将允许处理的最大请求数量重置为limitForPeriodtimeout-duration: 1 # 线程等待权限的默认等待时间instances:cloud-payment-service:baseConfig: defaultcontroller GetMapping(value /feign/pay/ratelimit/{id}) RateLimiter(name cloud-payment-service,fallbackMethod myRatelimitFallback) public String myBulkhead(PathVariable(id) Integer id) {return payFeignApi.myRatelimit(id); } public String myRatelimitFallback(Integer id,Throwable t) {return 你被限流了禁止访问/(ㄒoㄒ)/~~; }
http://www.w-s-a.com/news/893500/

相关文章:

  • 象山县城乡建设局网站做网站客户要求分期
  • 什么是网络营销型网站手机网站 图标
  • 全国新农村建设网站外包和劳务派遣哪个好
  • 网站权限控制什么软件做网站描述
  • 建网络商城网站wordpress关于
  • 专业网站建设分类标准重庆网站开发哪家专业
  • 织梦的网站关键词如何自己搭建微信小程序
  • 怎么做基金公司网站韩都衣舍网站建设ppt
  • 外贸网站模板aspnet网站开发 视频
  • 上海植物租赁做网站南浔网站建设
  • 怎么做学校网站做兼职工作上哪个网站招聘
  • 软件下载网站哪个比较好杭州开发小程序
  • 做网站都用什么技术学做名片的网站
  • 备案网站忘记密码乐装网
  • 电商扶贫网站建设淄博网站建设小程序
  • 网站群建设代理丰城网站建设公司
  • 青岛网站建设服务器wordpress迁移跳转原网站
  • 泰安网站建设哪里有公司如何注册网站
  • 做网站开专票税钱是多少个点上海市有哪些公司
  • 寿县有做网站开发的吗宁波网站建设方式
  • 网站建设和网站推广服务器怎么发布网站
  • 比较好的摄影网站雅安市政建设公司网站
  • 网站与微信区别wordpress 站内信
  • 宁夏网站开发设计说明书源码下载脚本之家
  • 邱县做网站百度搜索排名机制
  • 运城个人网站建设智慧团建系统官方网站登录
  • 公司营业执照可以做几个网站一家专门做母婴的网站
  • 网站建设商标属于哪个类别搜狗seo快速排名公司
  • 织梦做商城网站企业网络建站
  • 网站后期维护都有什么wordpress首页加图片