TiDB x 安能物流丨打造一栈式物流数据平台
作者:李家林 安能物流数据库团队负责人
本文以安能物流作为案例,探讨了在数字化转型中,企业如何利用 TiDB 分布式数据库来应对复杂的业务需求和挑战。
安能物流作为中国领先的综合型物流集团,需要应对大规模的业务流程,面临着核心结算系统所带来的数据库挑战。安能将结算系统 all in TiDB,克服传统 MySQL 数据库所面临的瓶颈,实现平稳迁移和性能提升的同时,打造一栈式物流数据平台,加速数字化升级。
关于安能物流
安能物流(简称:安能)成立于 2010年,是中国领先的综合型物流集团,为企业组织及消费者提供安全、便捷、优质、高效的物流服务。截止到目前安能物流自有员工 20,000 多名,自建 136 个分拨转运中心,乡镇覆盖高达 98%以上,服务范围遍及全国。安能自 2010 年成立开始,前后经历了七轮国际顶级资本的融资,于 2021 年双 11 在港交所成功上市,成为“港股快运第一股”。在快运行业,安能拥有中国零担快运市场最大的加盟网络,全网有 30,000 多家末端加盟商网点,自营车头和车挂数量高达 9,000多台。在产品服务方面,安能提供多样化的产品和特色业务,以满足不同用户的需求 。
TiDB 在安能结算系统的应用
安能结算系统作为公司最核心的业务系统,承载了总部 与末端 加盟商网点所有费用结算业务,包括: 账户管理、充值、开票、交易、调账、对账、代收、代付、税差等全费用结算业务流程处理。 从系统的逻辑架构图来看,其功能及业务处理流程也是相对复杂的,目前该套系统承载业务量: 日均 450,000 票,出货量 48,000 吨,支持末端 36,000 家网点实时开单算费扣款和定时批处理调账,日均用户数 3,800,调用量 5,000 万以上。
安能在 2017 年对结算系统进行了重构,选择了当时较为通用主流的 MySQL+ 数据库代理中间件分库分表的数据库架构,截止到 2023 年切换到 TiDB 之前,这套 MySQL 伪分布式数据库集群已经运行了 6 年。在数据量方面:核心业务表 4 张,单表字段 360+,共分了 8 个库;单表数据 3 亿+,2TB 大小。系统并发情况:30,000 多家网点开单高峰期集中在 16:30 -19:30 三小时内完成,数据库 QPS 均值为每秒 20,000,系统平均响应时间在 80-100ms 内。
为了避免同一个网点查询或处理数据时出现跨库问题,采用以网点编码作为分库分表的路由规则。为了保证单库单表数据量的均衡,安能还将产粮区如华东、华南和非产粮区如东北、西北区域的网点进行相互组合后放在同一个库同一个表中。即便如此,由于业务的不断增长,地区产业布局的变化,网点货量的变化导致原结算系统 MySQL 数据库面临越来越大的挑战,主要表现在:基于网点编码的分库分表路由规则,导致单库单表数据分布不均,存在数据热点问题;基于网点编码的分库分表路由规则,当数据量不断增长,数据库主库节点扩展复杂度高;MySQL 5.7 不支持表结构在线变更,系统变更停机时间长,导致业务可用性降低;Mycat 不完全支持标准 SQL 语法,导致研发侧代码改动较大;数据同步到下游进行分析时需要解决多库多表数据合并问题。
基于以上面临的诸多挑战,安能在 2020 年开始考虑将现有的这套结算的 MySQL 伪分布式集群找一个真正的分布式数据库进行替换。除了要考虑到结算系统复杂的业务处理流程外,还要考虑数据的实时性、准确性、高可用等诸多要求,经过一系列考察评估,最终安能选择了 TiDB 作为替换结算 MySQL 的最佳产品。
为什么选择 TiDB?这和其他选择 TiDB 用户的关注点类似。首先,TiDB 支持一键水平扩容。第二,TiDB 提供金融级高可用。第三, 增加了在线数据的生命周期,同时保证系统响应时长。第四,TiDB 高度兼容 MySQL,原来的这套 MySQL 数据库在代码侧不做改动,可以做到平滑迁移。第五,TiDB 支持表结构的在线变更,减少了系统的停机时间,提高了业务可用性。TiDB 6.5 版本的 Online DDL 离业务的需求还有一定差距,安能也高兴地看到 TiDB 7.1 版本 Online DDL 的效率有了显著提升。此外,TiDB 内置了丰富的图形监控界面,提供了完整的闭环运维能力,包括故障分析等,降低了运维成本。
即便如此,TiDB 在安能从测试到切换上线还是经历了 3 年左右的时间,主要分为测试和数据校验两个阶段。在测试阶段,安能从 TiDB 3.0 版本开始测试,持续到 5.4 版本,在这个过程中充分测试了 TiDB 每一个重要版本的核心特性和重要功能,也测试了 TiDB 推出的诸多工具,见证了 TiDB 产品成长和打磨过程。
具体测试方法是将生产数据通过消息队列 1:1 引流到 TiDB 来模拟真实结算业务数据写入效率,同时针对不同业务场景及多业务场景组合下进行数据新增、删除、修改、查询功能及性能压测。在测试阶段,发现两个主要的问题:第一,在 TiDB 4.0 版本,数据量 800GB 时,同表使用分区表和普通表,分区表的性能比普通表大概降低了 20%-30%。第二,在某些业务场景下,例如 “查询时间范围内,扫描下一站为网点”对 TiDB 进行压测,发现较严重的数据热点问题,初期的 TPS 较低。后期,DBA 通过调整主键解决了一些数据热点,也通过调整集群的配置,TPS 均值达到了 10,000+。
在数据校验阶段使用 DM 将结算 MySQL 8 个库的数据实时同步到 TiDB 中,按照生产环境 1:1 搭建了一套完整的结算系统仿真环境,进行了为期将近一年的数据校验工作,最终于 2023 年春节,将原有运行六年的 MySQL 集群无缝平滑切换到 TiDB 上。虽然安能不是快递物流行业第一个使用 TiDB 的用户,但是所有结算业务 all in TiDB,在行业内安能是第一个。
TiDB 上线投产后,给安能带来的收益主要有几个方面:第一,结算系统应用代码几乎无改动,平滑迁移至 TiDB,只是做了数据源的替换。第二,解决了使用 MySQL 数据库时所面临的所有挑战。第三,原来 MySQL 环境下,在线数据只能保存 6-8 个月的时间,使用 TiDB 的结算系统在线数据的生命周期翻倍,可以保存 1 年 8 个月,当然两年也没有问题。现在,单表的数据量大概是 35 亿,5 TB 大小。TiDB 数据库平均响应时长比原来 MySQL 降低了一倍,这是在业务高峰的时候,正常情况下是 25 毫秒。QPS 从原来 20,000 提升到了 45,000。运维成本方面,综合来看整体大概降低 30% 左右。
同样,在切换到 TiDB 后,也不是没有任何问题。从业务场景角度,安能希望 TiDB 在后期的版本中解决以下几个问题:第一,在多表交易的时候,TiDB 的 SQL 优化器会出现执行计划稳定性的问题。第二,业务数据导出场景下,容易出现 OOM 的问题,这个问题在 7.1 版本有了解决方案,后续我们会进行深入的验证。第三,分区表性能与普通表存在 10% 性能差距。升级到 6.5 版本之后又进行了测试,结果还是有性能的差异。最后,TiDB 子查询的性能比 MySQL 要差一些。
安能在系统建设过程中,经历了从垂直大集中模式到拆分数据库,再到微服务架构下数据分布式集中存储这样一个过程。目前,安能正将业务全链路环节运营操作系统切换到 TiDB 上,从而降低系统数据交互的复杂度。未来计划将结算业务和运营操作合并到同一个 TiDB 集群,安能在上海有两个数据中心,双机房之间通过万兆专线网络直连,可实现双数据中心部署,实现业务流量双活。可能大家会问,如果把结算业务与核心运营操作业务都放到一个集群会不会有问题?答案是没有问题,为什么?第一,安能结算业务与核心运营操作业务的时间点是分开的。第二,安能对核心运营操作业务的底层数据模型经过了全面的设计,不会出现多表关联复杂 SQL 查询等,所以可以这样做。
一栈式物流数据平台成为数字化升级的突破点
最后谈谈 TiDB 是如何助力安能数字化升级的。下图是安能快运业务的全链路流程。相对于快递而言,快运业务的流程节点更多,业务逻辑更复杂。在每一个业务环节,不但会涉及到业务操作,还会涉及到一些管理的动作,因此每个业务节点都会产生大量数据,而这些数据又环环相扣,这对数据的实时性和准确性要求非常高。安能今天已经做到了全链路业务流程的数据可视化,但是随着公司管理赋能动作的前移和下沉,接下来安能计划使用算法模型在现有的数据上进行人、车、场、货的各种预测。
安能自 2017 年开始走数据运营路线,到目前为止,自主研发 52 套 IT 系统,开发了一系列部署于整个业务流程的专有数字化工具,通过全链路数字化运营和智能化决策来实现效率升级。也正是因为如此,在今天数字化升级的背景下面临非常大的挑战,主要表现在:第一,业务系统多,功能分散,导致数据分散。第二,多个业务系统的数据采集到下游去做统计分析的时候,因口径差异,不同系统、相同时点、"同一个数据"不一致。第三,原先在不同的业务场景下缺乏顶层的设计,导致在不同的业务场景使用了不同的技术栈,从而造成了复杂的系统架构。
除此以外,当业务增长后系统无法承载高峰期负载并发,如何解决?结构化及非结构化数据快速增长,数据查询和处理请求无法响应,又该怎么办?今天,在物流快递行业内,安能整个 IT 团队的人员是最少的,在降本增效的背景下,IT 团队如何高效支撑业务的发展?这些都是接下来需要面临的问题。
基于当前所面临的挑战,首先要解决的问题就是数据交互和统一的问题,因此构建新一代一栈式物流数据平台成为了安能数字化升级的突破点。如何使用最简单、最灵活、最高效的技术体系和最少的成本构建新一代数据平台,从而实现货物从下单到签收及结算的全闭环实时状态追踪。基于 TiDB 的应用实践,后续安能将借助 TiDB 分布式、高可用性、弹性伸缩、大规模数据处理和实时 HTAP 等能力来构建新一代一栈式物流数据平台,加速数字化升级。
具体的设想是使用 TiDB 作为一栈式物流数据平台的底座,把安能源端业务系统所采集的所有数据,按照业务主题和数据域统一进行存储,降低不同系统之间数据交互的复杂度,解决数据统一的问题。在一栈式物流数据平台的基础上,可以做相应的数据服务,统一对外提供数据服务平台和 API 接口,以及更高阶的数据应用产品。安能相信在 TiDB 的助力下,数字化升级将会更加便捷和高效。
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/eb32fb6155638827d2aa19666bfd7745.png)
TiDB x 安能物流丨打造一栈式物流数据平台
作者:李家林 安能物流数据库团队负责人 本文以安能物流作为案例,探讨了在数字化转型中,企业如何利用 TiDB 分布式数据库来应对复杂的业务需求和挑战。 安能物流作为中国领先的综合型物流集团,需要应对大规模的业务流程ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
负载均衡算法实现
负载均衡算法实现 负载均衡介绍 负责均衡主要有以下五种方法实现: 1、轮询法 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载; 2、随机法 通过系统的随机算法&#…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Fimg.laomengit.com%2Fverification_box_8.gif&pos_id=img-8y1vSfGo-1693799755366%29)
Flutter 完美的验证码输入框 转载
刚开始看到这个功能的时候一定觉得so easy,开始的时候我也是这么觉得的,这还不简单,然而真正写的时候才发现并没有想象的那么简单。 先上图,不上图你们都不想看,我难啊,到Github: https://gith…...
![](https://www.ngui.cc/images/no-images.jpg)
SpringBoot整合Jpa实现增删改查功能(提供Gitee源码)
前言:在日常开发中,总是撰写一些简单的SQL会非常耗时间,Jpa可以完美的帮我们提高开发的效率,对于常规的SQL不需要我们自己撰写,相对于MyBatis有着更简单易用的功能,但是MyBatis自由度相对于Jpa会更高一些&a…...
![](https://img-blog.csdnimg.cn/067558d0fad3498d9e334ceb98d078b1.png)
微服务[Nacos]
CAP 1)一致性(Consistency) (所有节点在同一时间具有相同的数据) 2)可用性(Availability)(保证每个请求不管成功或者失败都有响应) 3)分区容错(Partition tolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作) 一、虚拟机镜像准备 …...
![](https://img-blog.csdnimg.cn/60c37df3a7b844f4ba03f081f501cbef.png)
8K视频来了,8K 视频编辑的最低系统要求
当今 RED、Canon、Ikegami、Sony 等公司的 8K 摄像机以及 8K 电视,许多视频内容制作人和电影制作人正在认真考虑 8K 拍摄、编辑和后期处理,需要什么样的系统来处理如此海量的数据? 中央处理器(CPU) 首先,…...
![](https://www.ngui.cc/images/no-images.jpg)
AsyncContext优雅实现HTTP长轮询接口
一、背景 接到一个需求,实现方案时需要提供一个HTTP接口,接口需要hold住5-8秒,轮询查询数据库,一旦数据库中值有变化,取出变化的值进行处理,处理完成后返回响应。这不就是长轮询吗,如何优雅的实…...
![](https://img-blog.csdnimg.cn/img_convert/5dcaefeda45e28aef68a779eb7bada6a.jpeg)
如何制作一个百货小程序
在这个数字化时代,小程序已成为各行各业的必备工具。其中,百货小程序因其便捷性和多功能性,越来越受到人们的青睐。那么,如何制作一个百货小程序呢?下面,我们就详细介绍一下无需编写代码的步骤。 一、进入后…...
![](https://img-blog.csdnimg.cn/b4b19ea71b894ef08028ddf053d2b501.png#pic_center%20=70%x60%)
【人工智能】—局部搜索算法、爬山法、模拟退火、局部剪枝、遗传算法
文章目录 局部搜索算法内存限制局部搜索算法示例:n-皇后爬山算法随机重启爬山模拟退火算法局部剪枝搜索遗传算法小结 局部搜索算法 在某些规模太大的问题状态空间内,A*往往不够用 问题空间太大了无法访问 f 小于最优的所有状态通常,甚至无法储…...
![](https://img-blog.csdnimg.cn/091fab3642254c1c884065c1caefa96c.gif#pic_center)
MATLAB旋转动图的绘制
MATLAB旋转动图的绘制 文章目录 MATLAB旋转动图的绘制1、动图效果2、matlab代码 利用matlab实现三维旋转动图的绘制。 1、动图效果 2、matlab代码 close all clear clcf(x,y,z)(x.^2 (9./4).*y.^2 z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3; [x,y,z]meshgrid(linspac…...
![](https://img-blog.csdnimg.cn/8cdcbd1f8dea4b88b7f7ffaa0269022c.png)
算法笔记 近似最近邻查找(Approximate Nearest Neighbor Search,ANN)
1 介绍 精准最近邻搜索中数据维度一般较低,所以会采用穷举搜索,即在数据库中依次计算其中样本与所查询数据之间的距离,抽取出所计算出来的距离最小的样本即为所要查找的最近邻。 当数据量非常大的时候,搜索效率急剧下降。——>…...
![](https://img-blog.csdnimg.cn/img_convert/3e84ee4009bdfda0f1289f9ab840dad8.webp?x-oss-process=image/format,png)
uni-app 之 vue语法
uni-app 之 vue语法 image.png --- v-html 字符 --- image.png <template><view><view>{{title}}</view>--- v-html 字符 ---<view>{{title2}}</view><view v-html"title2"></view><view>{{arr}}</view&g…...
![](https://img-blog.csdnimg.cn/59027d258848442fa465c9e9925e221f.jpeg#pic_center)
Android之RecyclerView仿ViewPage滑动
文章目录 前言一、效果图二、实现步骤1.xml主布局2.所有用到的drawable资源文件3.xml item布局4.adapter适配器5.javabean实体类6.activity使用 总结 前言 我们都知道ViewPageFragment滑动,但是的需求里面已经有了这玩意,但是在Fragment中还要有类似功能…...
![](https://img-blog.csdnimg.cn/ebdea737007041bbb16511d9a075cea5.png)
【owt-server】AudioSendAdapter分析
owt-server/source/core/rtc_adapter/AudioSendAdapter.cc使用其他线程运行rtprtcpmodule taskrunner分配线程:因此,对rtprtcp的使用都是加了mutex的:首先为音频发送者生成一个随机的ssrc并注册 // SSRCs of this type.std::vector<uint32_t> ssrcs_;发送还要向rtprtc…...
![](https://www.ngui.cc/images/no-images.jpg)
day33 List接口
List实现类 java.util.ArrayList: 底层通过数组保存数据 , 查询快,增删慢 java.util.LinkedList: 底层通过链表保存数据, 查询慢,增删快 如果对操作性能没有特殊要求,我们一般选择ArrayList…...
![](https://www.ngui.cc/images/no-images.jpg)
云原生周刊:Linkerd 发布 v2.14 | 2023.9.4
开源项目推荐 Layerform Layerform 是一个 Terraform 包装器,可帮助工程师使用纯 Terraform 文件构建可重用的基础设施。 为了实现重用,Layerform 引入了层的概念。每层都包含一些基础设施,并且可以堆叠在另一层之上。 除了更易于使用之外…...
![](https://img-blog.csdnimg.cn/642c6816e4e14cbb860567de314f455d.png)
CS420 课程笔记 P5 - 内存编辑 数据类型
文章目录 IntroductionData typesBooleansNegative numbers (Signed integers)Floating-point numbers (fractional numbers) Unknown value scansHealth findingFloat finding (Player position hack / Teleport hack) Additional things Introduction 这节课将结束数据类型并…...
![](https://www.ngui.cc/images/no-images.jpg)
oracle报错 ORA-02290: 违反检查约束条件问题
保存数据库信息时,提示违反检查约束条件,如图: org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-02290: 违反检查约束条件 (MXUSER…...
![](https://img-blog.csdnimg.cn/3786174527f2487b82a3f36166f71747.png)
Prometheus + grafana 的监控平台部署
一、Prometheus安装 tar -zxvf prometheus-2.44.0.linux-amd64.tar.gz -C /opt/module/ sudo chown -R bigdata:bigdata /opt/module/prometheus-2.44.0.linux-amd64 mv /opt/module/prometheus-2.44.0.linux-amd64 /opt/module/prometheus-2.44.0 ln -s /opt/module/promethe…...
![](https://www.ngui.cc/images/no-images.jpg)
npm、yarn、pnpm
一、简介 CommonJS 的出现,使 node 环境下的 JS 代码可以用模块更加细粒度的划分。一个类、一个函数、一个对象、一个配置等等均可以作为模块,这种细粒度的划分,是开发大型应用的基石。 为了解决在开发过程中遇到的常见问题,比如…...
![](https://img-blog.csdnimg.cn/a2cb86563df349dc84c37b261a8bc935.jpeg)
力扣|两数相加
先放题目: 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,…...
![](https://img-blog.csdnimg.cn/165c1e52df26454f84ff9bbc9e97772d.png)
prometheus通过blackbox-exporter监控web站点证书
1 概述 线上站点普遍是https,因此监控https web站点的证书的过期时间,是一个基础性需求。例如,证书过期会导致tls握手失败,进而导致用户无法正常访问web站点。 blackbox-expoter是一个web服务,它暴露了一个接口&#…...
![](https://img-blog.csdnimg.cn/86766580f5d841f48bc207400064aed8.png)
CentOS7 Hadoop3.3.0 安装与配置
一、安装JDK 1、创建文件夹tools和training用于存放压缩包和解压使用,tools存放压缩包,training用于解压后安装jdk和hadoop的路径。 1)回到路径为 / 的位置 cd /2) 创建 tools 和 training mkdir toolsmkdir training3) 进入tools文件夹 …...
![](https://img-blog.csdnimg.cn/1e0be556734f4255961f790934742b71.jpeg#pic_center)
2023年9月CDGA/CDGP数据治理认证考试报名,当然弘博创新
据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA) 数据治理专家(CertifiedDataGovernanc…...
![](https://img-blog.csdnimg.cn/ad2128a376bf4fb998cec70317267dc0.png)
Re45:读论文 GPT-1 Improving Language Understanding by Generative Pre-Training
诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:Improving Language Understanding by Generative Pre-Training 论文下载地址:https://www.mikecaptain.com/resources/pdf/GPT-1.pdf 本文是2018年OpenAI的工作,…...
![](https://img-blog.csdnimg.cn/20190719172208807.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW5mYWp1c2hp,size_16,color_FFFFFF,t_70)
VB.NET 如何将某个Excel的工作表中复制到另一个的Excel中的工作表中https://bbs.csdn.net/topics/392861034
参考http://share.freesion.com/306372/可以实现直接拷贝指定表 Private Sub Excel复制工作簿()Dim myExcelApp As New Microsoft.Office.Interop.Excel.ApplicationmyExcelApp.Workbooks.Open(System.Environment.CurrentDirectory "\\测试用例.xlsx", Type.Missin…...
![](https://img-blog.csdnimg.cn/f60ba46a447a480683ac76fbf59aed7e.png#pic_center)
深入解析Kotlin类与对象:构造、伴生、单例全面剖析
前言 本篇文章将带您了解Kotlin编程中的重要概念:类及构造函数、访问修饰符、伴生对象和单例模式。就像搭积木一样,我们会逐步揭开这些概念的面纱,让您轻松理解它们的作用和用法。无论您是编程新手还是有经验的开发者,本文都将为…...
![](https://img-blog.csdnimg.cn/05526439a76c49e1b252ff8b6cddb81b.png)
JavaScript构造函数
1、构造函数: 是一个函数,是通过new运算符进行调用,生成一个特殊的对象并返回。 function 函数名([参数]){ this.属性名 ‘属性值’ ... this.属性名 function([参数]){ 函数体语句 } } 通常情况下,建议构造函数的首字母大写 …...
![](https://www.ngui.cc/images/no-images.jpg)
手写嵌入式操作系统(基于stm8单片机)
#include <stc8h.h> #include <intrins.h> #define MAX_TASKS 2 //简化方面,我们当前操作系统只有2个task #define MAX_TASK_DEP 32unsigned char idata task_sp[MAX_TASKS]; // 任务的堆栈指针 unsigned char idata task_stack[MAX_TASKS][MAX_TASK_DEP];// 每个…...
![](https://www.ngui.cc/images/no-images.jpg)
vue3.3 ~
defineModel 原本: // 1 defineProps({modelValue: {type: Number,required: true,default: 0} })defineProps([modelValue]) // 2 const emit defineEmits([update:modelValue])现在: const value defineModel<number>({ default: 0 })defin…...
![](/images/no-images.jpg)
qq云端服务器/网站优化排名首页
字符串转换整数的库函数Given a string and we have to convert it into lowercase string without using any library function. 给定一个字符串,我们必须在不使用任何库函数的情况下将其转换为小写字符串。 PHP code: PHP代码: <?php//function …...
![](https://img-blog.csdnimg.cn/img_convert/0b1331709591d260c1c78e86d0c51c18.png)
做网站能自己找服务器吗/在线html5制作网站
当你在浏览器输入地址:http://localhost:8080/如果你的文件根目录里有 index.html,浏览器就会显示 index.html的内容,如果没有 index.html,Apache将在浏览器显示文件根目录的目录列表,目录列表包括文件根目录下的文件和…...
![](/images/no-images.jpg)
做网站公司赚钱么/线上营销培训
http://zhidao.baidu.com/question/230866604.html23个省、4个直辖市、2个特别行政区、5个自治区。23个省:河北省(冀)、山东省(齐)、辽宁省(辽)、黑龙江省(黑)、吉林省&a…...
![](https://s1.51cto.com/images/20180817/1534468668471441.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
果洛营销网站建设哪家好/企业网站seo托管怎么做
防火墙的作用:它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过,有纯软件的防火墙,最常见就是集成在系统内核当中的防火墙。还有企业常用的硬件…...
![](http://imgs.ebrun.com/resources/ebonno/storage/photos/201905/18/1558150920817409.png)
如何用vs的c 做网站/google浏览器官网
文 | 魏启扬 来源 | 智能相对论(ID:aixdlun) 在自动驾驶赛道中,虽然每个玩家的发展策略都有所求,专长方向也各有不同,但随着越来越多自动驾驶商业落地的消息传出,其中的头部玩家们似乎已经逐渐…...
知道网站是wp程序做的如何仿站/淘宝怎么优化关键词步骤
最近在用RDA工具,在网上找资料的过程中发现介绍大多都是RDA 4.24的版本。但是我去MOS下载的时候,只能下载RDA8.05的版本了。 在RDA 4.24的版本中,在第一次运行的时候,需要设置很多收集项,但是在RDA8.0.5的版本中&#…...