范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

基于mogileFS搭建分布式文件系统海量小文件的存储利器

  一、分布式文件系统
  1.简介
  分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。例如,用户可以"发表"一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样。
  当下我们处在一个互联网飞速发展的信息社会,在海量并发连接的驱动下每天所产生的数据量必然以几何方式增长,随着信息连接方式日益多样化,数据存储的结构也随着发生了变化。在这样的压力下使得人们不得不重新审视大量数据的存储所带来的挑战,例如:数据采集、数据存储、数据搜索、数据共享、数据传输、数据分析、数据可视化等一系列问题。
  传统存储在面对海量数据存储表现出的力不从心已经是不争的事实,例如:纵向扩展受阵列空间限制、横向扩展受交换设备限制、节点受文件系统限制。
  然而分布式存储的出现在一定程度上有效的缓解了这一问题,之所以称之为缓解是因为分布式存储在面对海量数据存储时也并非十全十美毫无压力,依然存在的难点与挑战例如:节点间通信、数据存储、数据空间平衡、容错、文件系统支持等一系列问题仍处在不断摸索和完善中。
  2.分布式文件系统的一些解决方案
  Google Filesystem适合存储海量大个文件,元数据存储与内存中
  HDFS(Hadoop Filesystem)GFS的山寨版,适合存储大量大个文件
  TFS(Taobao Filesystem)淘宝的文件系统,在名称节点上将元数据存储与关系数据库中,文件数量不在受限于名称节点的内容空间,可以存储海量小文件LustreOracle开发的企业级分布式系统,较重量级MooseFS基于FUSE的格式,可以进行挂载使用MogileFS
  擅长存储海量的小数据,元数据存储与关系型数据库中二、MogileFS
  1.简介
  MogileFS是一个开源的分布式文件系统,用于组建分布式文件集群,由LiveJournal旗下DangaInteractive公司开发,Danga团队开发了包括 Memcached、MogileFS、Perlbal等不错的开源项目:(注:Perlbal是一个强大的Perl写的反向代理服务器)。MogileFS是一个开源的分布式文件系统。
  目前使用 MogileFS 的公司非常多,比如国外的一些公司,日本前几名的公司基本都在使用这个.
  国内所知道的使用 MogileFS 的公司有图片托管网站 yupoo又拍,digg, 土豆, 豆瓣,1 号店, 大众点评,搜狗,安居客等等网站.基本很多网站容量,图片都超过 30T 以上。
  2.MogileFS特性
  1) 应用层提供服务,不需要使用核心组件
  2)无单点失败,主要有三个组件组成,分为tracker(跟踪节点)、mogstore(存储节点)、database(数据库节点)
  3)自动复制文件,复制文件的最小单位不是文件,而是class
  4)传输中立,无特殊协议,可以通过NFS或HTTP实现通信
  5)简单的命名空间:没有目录,直接存在与存储空间上,通过域来实现
  6)不用共享任何数据
  3.MogileFS的组成
  1)Tracker--跟踪器,调度器
  MogileFS的核心,是一个调度器,mogilefsd进程就是trackers进程程序,trackers的主要职责有:删除数据、复制数据、监控、查询等等.这个是基于事件的( event-based ) 父进程/消息总线来管理所有来之于客户端应用的交互(requesting operations to be performed), 包括将请求负载平衡到多个"query workers"中,然后让 mogilefs的子进程去处理.
  mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定义好trackers,因此最好同时运行多个trackers来做负载均衡.trackers也可以只运行在一台机器上,使用负载均衡时可以使用搞一些简单的负载均衡解决方案,如haproxy,lvs,nginx等,
  tarcker的配置文件为/etc/mogilefs/mogilefsd.conf,监听在TCP的7001端口
  2)Database--数据库部分
  主要用来存储mogilefs的元数据,所有的元数据都存储在数据库中,因此,这个数据相当重要,如果数据库挂掉,所有的数据都不能用于访问,因此,建议应该对数据库做高可用
  3)mogstored--存储节点
  数据存储的位置,通常是一个HTTP(webDAV)服务器,用来做数据的创建、删除、获取,任何 WebDAV 服务器都可以, 不过推荐使用 mogstored . mogilefsd可以配置到两个机器上使用不同端口… mogstored 来进行所有的 DAV 操作和流量,IO监测, 并且你自己选择的HTTP服务器(默认为 perlbal)用来做 GET 操作给客户端提供文件.
  典型的应用是一个挂载点有一个大容量的SATA磁盘. 只要配置完配置文件后mogstored程序的启动将会使本机成为一个存储节点.当然还需要mogadm这个工具增加这台机器到Cluster中.
  配置文件为/etc/mogilefs/mogstored.conf,监听在TCP的7500端口
  4.基本工作流程
  应用程序请求打开一个文件 (通过RPC 通知到 tracker, 找到一个可用的机器). 做一个 "create_open" 请求.
  tracker 做一些负载均衡(load balancing)处理,决定应该去哪儿,然后给应用程序一些可能用的位置。
  应用程序写到其中的一个位置去 (如果写失败,他会重新尝试并写到另外一个位置去).
  应用程序 (client) 通过"create_close" 告诉tracker文件写到哪里去了.
  tracker 将该名称和域命的名空间关联 (通过数据库来做的)
  tracker, 在后台, 开始复制文件,知道他满足该文件类别设定的复制规则
  然后,应用程序通过 "get_paths" 请求 domain+key (key == "filename") 文件, tracker基于每一位置的I/O繁忙情况回复(在内部经过 database/memcache/etc 等的一些抉择处理), 该文件可用的完整 URLs地址列表.
  应用程序然后按顺序尝试这些URL地址. (tracker’持续监测主机和设备的状态,因此不会返回死连接,默认情况下他对返回列表中的第一个元素做双重检查,除非你不要他这么做..)三、Nginx+mogilefs的实现
  1.拓扑图
  说明:1.用户通过URL访问前端的nginx
  2.nginx根据特定的挑选算法,挑选出后端一台tracker来响应nginx请求
  3.tracker通过查找database数据库,获取到要访问的URL的值,并返回给nginx
  4.nginx通过返回的值及某种挑选算法挑选一台mogstored发起请求
  5.mogstored将结果返回给nginx
  6.nginx构建响应报文返回给客户端
  2.ip规划
  角色运行软件ip地址反向代理nginx192.168.1.201存储节点与调度节点1
  mogilefs192.168.1.202存储节点与调度节点2
  mogilefs192.168.1.203数据库节点
  MariaDB192.168.1.204
  3.数据库的安装操作并为授权
  关于数据库的编译安装,请参照本人相关博文http://wangfeng7399.blog.51cto.com/3518031/1393146,本处将不再累赘,本处使用的为yum源的安装方式安装mysqlmysql> grant all on *.* to "root"@"192.168.1.%" identified by "wangfeng7399";
  Query OK, 0 rows affected (0.00 sec)
  mysql> grant all on mgdb.* to "mguser"@"192.168.1.%" identified by "wangfeng7399";
  Query OK, 0 rows affected (0.00 sec)
  mysql> flush privileges;
  Query OK, 0 rows affected (0.00 sec)
  4.安装mogilefs.安装mogilefs,可以使用yum安装,也可以使用编译安装,本处通过yum安装[root@node2 download]# ls
  MogileFS-Server-2.46-2.el6.noarch.rpm
  MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm
  MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm
  MogileFS-Utils-2.19-1.el6.noarch.rpm
  perl-MogileFS-Client-1.14-1.el6.noarch.rpm
  perl-Net-Netmask-1.9015-8.el6.noarch.rpm
  perl-Perlbal-1.78-1.el6.noarch.rpm
  [root@node2 download]# yum install *.rpm perl-IO-AIO -y
  5.初始化数据库 [root@node2 ~]# mogdbsetup --dbhost=192.168.1.204 --dbname=mgdb --dbrootuser=root --dbrootpass=wangfeng7399 --dbuser=mguser --dbpass=wangfeng7399 --yes
  mysql> show tables;
  +----------------------+
  | Tables_in_mgdb |
  +----------------------+
  | checksum |
  | class |
  | device |
  | domain |
  | file |
  | file_on |
  | file_on_corrupt |
  | file_to_delete |
  | file_to_delete2 |
  | file_to_delete_later |
  | file_to_queue |
  | file_to_replicate |
  | fsck_log |
  | host |
  | server_settings |
  | tempfile |
  | unreachable_fids |
  +----------------------+
  可以看到在数据库中创建了一些表
  6.修改配置文件,启动服务修改/etc/mogilefs/mogilefsd.conf
  daemonize = 1 //是否已守护进程模式启动mogilefsd
  pidfile = /var/run/mogilefsd/mogilefsd.pid //piad文件的存放位置
  db_dsn = DBI:mysql:mgdb:host=192.168.1.204 //数据库的存放位置
  db_user = mguser //数据库的用户名
  db_pass = wangfeng7399 //数据库的密码
  listen = 0.0.0.0:7001 //监听的地址
  [root@node2 ~]# ss -tnl |grep 7001
  LISTEN 0 128 *:7001 *:*
  修改/etc/mogilefs/mogstored.conf
  maxconns = 10000 //最大连接数
  httplisten = 0.0.0.0:7500 //http监听的地址
  mgmtlisten = 0.0.0.0:7501 //mgm监听的地址
  docroot = /mgdata //数据的存放位置
  [root@node2 ~]# mkdir /mgdata/dev1
  [root@node2 ~]# chown -R mogilefs.mogilefs /mgdata
  [root@node2 ~]# chown mogilefs.mogilefs /etc/mogilefs/mogstored.conf
  [root@node2 ~]# ss -tnl
  State Recv-Q Send-Q Local Address:Port Peer Address:Port
  LISTEN 0 128 *:7500 *:*
  LISTEN 0 128 *:7501 *:*
  7.配置mogilefs[root@node2 ~]# mogadm
  Usage: (enter any command prefix, leaving off options, for further help)
  mogadm check Check the state of the MogileFS world.
  mogadm stats Show MogileFS system statistics. (DEPRECATED: use mogstats instead)
  mogadm host ...
  host add ... Add a host to MogileFS.
  host delete ... Delete a host.
  host list List all hosts.
  host mark ... Change the status of a host. (equivalent to "modify --status")
  host modify ... Modify a host"s properties.
  mogadm device ...
  device add ... Add a device to a host.
  device list ... List all devices, for each host.
  device mark ... Mark a device as {alive,dead,down,drain,readonly}
  device modify ... Modify a device"s properties.
  device summary ... List the summary of devices, for each host.
  mogadm domain ...
  domain add ... Add a domain (namespace)
  domain delete ... Delete a domain.
  domain list List all hosts.
  mogadm class ...
  class add ... Add a file class to a domain.
  class delete ... Delete a file class from a domain.
  class list List all classes, for each domain.
  class modify ... Modify properties of a file class.
  mogadm slave ...
  slave add ... Add a slave node for store usage
  slave delete ... Delete a slave node for store usage
  slave list List current store slave nodes.
  slave modify ... Modify a slave node for store usage
  mogadm fsck ...
  fsck clearlog Clear the fsck log
  fsck printlog Display the fsck log
  fsck reset ... Reset fsck position back to the beginning
  fsck start Start (or resume) background fsck
  fsck status Show fsck status
  fsck stop Stop (pause) background fsck
  fsck taillog Tail the fsck log
  mogadm rebalance ...
  rebalance policy ... Add or adjust the current policy
  rebalance reset Reset an existing policy
  rebalance settings Display rebalance settings
  rebalance start Start a rebalance job
  rebalance status Show status of current rebalance job
  rebalance stop Stop a rebalance job
  rebalance test Show what devices the current policy would match
  mogadm settings ...
  settings list List all server settings
  settings set ... Set server setting "key" to "value".
  添加存储主机[root@node2 ~]# mogadm --trackers=192.168.1.202:7001 host add 192.168.1.202 -ip=192.168.1.202 --status=alive
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 host list
  192.168.1.202 [1]: alive
  IP: 192.168.1.202:7500
  添加存储设备 [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 device add 192.168.1.202 1
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 device list
  192.168.1.202 [1]: alive
  used(G) free(G) total(G) weight(%)
  dev1: alive 0.393 18.293 18.686 100
  添加域[root@node2 ~]# mogadm --trackers=192.168.1.202:7001 domain add imgs
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 domain add files
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 domain list
  domain class mindevcount replpolicy hashtype
  -------------------- -------------------- ------------- ------------ -------
  files default 2 MultipleHosts() NONE
  imgs default 2 MultipleHosts() NONE
  添加class[root@node2 ~]# mogadm --trackers=192.168.1.202:7001 class add imgs class1
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 class add imgs class2
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 class add files class1
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 class add files class2
  [root@node2 ~]# mogadm --trackers=192.168.1.202:7001 domain list
  domain class mindevcount replpolicy hashtype
  -------------------- -------------------- ------------- ------------ -------
  files class1 2 MultipleHosts() NONE
  files class2 2 MultipleHosts() NONE
  files default 2 MultipleHosts() NONE
  imgs class1 2 MultipleHosts() NONE
  imgs class2 2 MultipleHosts() NONE
  imgs default 2 MultipleHosts() NONE
  8.配置192.168.1.203的mogilefs。切记不要初始化数据库,配置应该与192.168.1.202一样[root@node3 download]# mogadm --trackers=192.168.1.203:7001 host add 192.168.1.203 --ip=192.168.1.203 --status=alive
  [root@node3 download]# mogadm --trackers=192.168.1.203:7001 host list
  192.168.1.202 [1]: alive
  IP: 192.168.1.202:7500
  192.168.1.203 [2]: alive
  IP: 192.168.1.203:7500
  添加存储节点
  [root@node3 download]# mkdir /mgdata/dev2
  [root@node3 download]# chown mogilefs.mogilefs -R /mgdata/dev2/
  [root@node3 download]# mogadm --trackers=192.168.1.203:7001 device add 192.168.1.203 2
  [root@node3 download]# mogadm --trackers=192.168.1.203:7001 domain list
  domain class mindevcount replpolicy hashtype
  -------------------- -------------------- ------------- ------------ -------
  files class1 2 MultipleHosts() NONE
  files class2 2 MultipleHosts() NONE
  files default 2 MultipleHosts() NONE
  imgs class1 2 MultipleHosts() NONE
  imgs class2 2 MultipleHosts() NONE
  imgs default 2 MultipleHosts() NONE
  只需要添加主机就可以看到在其他主机上配置的内容
  9.尝试上传数据,获取数据,客户端读取数据
  上传数据,在任何一个节点上传都可以[root@node3 download]# mogupload --trackers=192.168.1.203:7001 --domain=imgs --key="2.jpg" --file="/root/1.jpg"
  获取数据[root@node3 download]# mogfileinfo --trackers=192.168.1.203:7001 --domain=imgs --key="2.jpg"
  - file: 2.jpg
  class: default
  devcount: 2
  domain: imgs
  fid: 4
  key: 2.jpg
  length: 49809
  - http://192.168.1.203:7500/dev2/0/000/000/0000000004.fid
  - http://192.168.1.202:7500/dev1/0/000/000/0000000004.fid
  客户端查看数据
  我们可以通过任何一个节点查看到数据三、与nginx结合
  要想nginx能够实现对后端trucker的反向代理,必须结合第三方模块来实现
  1.编译安装nginx [root@node1 ~]# tar xf nginx-1.6.0.tar.gz
  [root@node1 ~]# tar xf nginx_mogilefs_module-1.0.4.tar.gz
  [root@node1 ~]# useradd -r nginx
  [root@node1 ~]# cd nginx-1.6.0
  [root@node1 nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --add-module=../nginx_mogilefs_module-1.0.4
  [root@node1 nginx-1.6.0]# make && make install
  2.准备启动脚本#!/bin/bash
  #nginx - this script starts and stops the nginx daemon
  #
  # chkconfig: - 85 15
  # description: Nginx is an HTTP(S) server, HTTP(S) reverse \
  # proxy and IMAP/POP3 proxy server
  # processname: nginx
  # config: /etc/nginx/nginx.conf
  # config: /etc/sysconfig/nginx
  # pidfile: /var/run/nginx.pid
  # Source function library.
  . /etc/rc.d/init.d/functions
  # Source networking configuration.
  . /etc/sysconfig/network
  # Check that networking is up.
  [ "$NETWORKING" = "no" ] && exit 0
  nginx="/usr/local/nginx/sbin/nginx"
  prog=$(basename $nginx)
  NGINX_CONF_FILE="/etc/nginx/nginx.conf"
  [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  lockfile=/var/lock/subsys/nginx
  make_dirs() {
  # make required directories
  user=`nginx -V 2>&1 | grep "configure arguments:" | sed "s/[^*]*--user=\([^ ]*\).*/\1/g" -`
  options=`$nginx -V 2>&1 | grep "configure arguments:"`
  for opt in $options; do
  if [ `echo $opt | grep ".*-temp-path"` ]; then
  value=`echo $opt | cut -d "=" -f 2`
  if [ ! -d "$value" ]; then
  # echo "creating" $value
  mkdir -p $value && chown -R $user $value
  fi
  fi
  done
  }
  start() {
  [ -x $nginx ] || exit 5
  [ -f $NGINX_CONF_FILE ] || exit 6
  make_dirs
  echo -n $"Starting $prog: "
  daemon $nginx -c $NGINX_CONF_FILE
  retval=$?
  echo
  [ $retval -eq 0 ] && touch $lockfile
  return $retval
  }
  stop() {
  echo -n $"Stopping $prog: "
  killproc $prog -QUIT
  retval=$?
  echo
  [ $retval -eq 0 ] && rm -f $lockfile
  return $retval
  }
  restart() {
  configtest || return $?
  stop
  sleep 1
  start
  }
  reload() {
  configtest || return $?
  echo -n $"Reloading $prog: "
  killproc $nginx -HUP
  RETVAL=$?
  echo
  }
  force_reload() {
  restart
  }
  configtest() {
  $nginx -t -c $NGINX_CONF_FILE
  }
  rh_status() {
  status $prog
  }
  rh_status_q() {
  rh_status >/dev/null 2>&1
  }
  case "$1" in
  start)
  rh_status_q && exit 0
  $1
  ;;
  stop)
  rh_status_q || exit 0
  $1
  ;;
  restart|configtest)
  $1
  ;;
  reload)
  rh_status_q || exit 7
  $1
  ;;
  force-reload)
  force_reload
  ;;
  status)
  rh_status
  ;;
  condrestart|try-restart)
  rh_status_q || exit 0
  ;;
  *)
  echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
  exit 2
  esac
  3.nginx与mofilefs互联location ~* /p_w_picpaths/ {
  mogilefs_tracker 192.168.1.202:7001;
  mogilefs_domain imgs;
  mogilefs_pass {
  proxy_pass $mogilefs_path;
  proxy_hide_header Content-Type;
  proxy_buffering off;
  }
  }
  location ~* /file {
  mogilefs_tracker 192.168.1.202:7001;
  mogilefs_domain files;
  mogilefs_pass {
  proxy_pass $mogilefs_path;
  proxy_hide_header Content-Type;
  proxy_buffering off;
  }
  }
  查看效果
  5.配置后端truckers的集群 upstream mgfs {
  server 192.168.1.202:7001;
  server 192.168.1.203:7001;
  }
  server{
  location ~* /p_w_picpaths/ {
  mogilefs_tracker mgfs;
  mogilefs_domain imgs;
  mogilefs_pass {
  proxy_pass $mogilefs_path;
  proxy_hide_header Content-Type;
  proxy_buffering off;
  }
  }
  location ~* /file {
  mogilefs_tracker mgfs;
  mogilefs_domain files;
  mogilefs_pass {
  proxy_pass $mogilefs_path;
  proxy_hide_header Content-Type;
  proxy_buffering off;
  }
  }
  }
  查看效果
  大功告成了,后续思路,前段的nginx和数据库都存在单点故障,可以实现高可用集群

奔驰A级试驾A200L运动轿车时尚版,1。3T引擎够不够用?奔驰A级作为家族入门级别车型,销量表现一直不错,从6月份销量数据来看,卖出了6000台。有部分车主会吐槽高价低配,但有部分车主表示这个价位买到奔驰车标就值了。实际上现实生活中很多人五菱凯捷试驾1。5TCVT旗舰型,配6座满足家用主打10万级市场对于很多家庭用户来说,5座车型越来越不满足于日常出行,毕竟平时可能还有老一辈的父母,更何况大多数家庭不只局限于一胎。所以很多人愿意去购买大空间的MPV车型,当然买车之前也会去权衡价捷达VS7黑锋版加入黑色套件,延续1。4T动力8月15号上市!捷达VS7大多数人并不陌生,作为奇瑞家族的一个年轻品牌,旗下车型主打性价比,VS7作为家族首款中型SUV,上市已经有一年多的时间。家族目前想要推出一款特殊版本车型,叫做黑锋版,实际威兰达高性能版试驾2。5L四驱激擎版,百公里加速可达5。92秒30岁实际上是一个分水岭,购车的时候不会苦于没有资金。很多人20岁买车不追求性能更注重均衡性,但到了30岁需要一定的可玩性,而且在大城市中,最好是买一款能上绿色牌照的车型。可以是纯迈巴赫S级试驾S4504MTIC典藏版,车长超5米4配3。0T双涡轮引擎百万级豪车并不是每一个人都有机会体验,但不妨碍我们去憧憬。作为一个专业车评人,最近试驾了一台迈巴赫S级S4504MATIC典藏版,同样是目前在售版本中的顶配,厂商指导售价在145。动力比领克03更强,最大扭矩380Nm,领克05官图曝光动力比领克03更强,最大扭矩380Nm,领克05官图曝光领克03的出现让国内消费者印象深刻,作为家族车型中的一款性能小钢炮,辨识度很高,也在市场上取得了很好的成绩。领克汽车想要再接吉利帝豪试驾UP1。5LCVT向上版,主打10万级市场实力如何?对于刚出来工作的小年轻来讲,人生中第1台车往往都不会追求多么有档次,反而是经济实用才是关键。平时能够遮风挡雨,避免等待公交的时间就知足了,最近我试驾了一台10万级别的国产车,它就是聚焦品质链接你我首届SunDay融创服务超级体验日盛大开启10月17日,首届SunDay融创服务超级体验日在合肥盛大开启,近千位业主欢聚一堂,用美好邻里的生活诗篇,开启品质生活新旅程。聚焦品质链接美好生活品质生活,正在成为时代发展的新主题深圳发布无人机通用要求团体标准,上品回收上线无人机回收多年以来,以无人机为代表的新业态蓬勃发展,特别是民用无人机的市场需求呈现井喷式爆发增长,从常规的娱乐航拍发展到城市管理农业植保电力巡检灾害救援智能物流等更加广泛的行业领域。无人机在抗洪救灾中的科技力量,傲势无人机显身手争分夺秒,傲势无人机系统实现全方位监控今年河南遭遇百年不遇的特大洪水,7月21日,沃飞长空救援团队星夜兼程驰援一线,在河南省防汛抗旱指挥部统一部署下,先后参与了河南省郑州市荥阳市新高尔夫6月卖出8014台,起售12。98万第八代车型实力如何?从一定角度来看,小钢炮车型还是很讨年轻消费者喜爱,大众高尔夫作为一款成熟的车型,目前已经经历八代。新款车型跟科技感进行了很好地结合,官方自诩为全新数字高尔夫,上市后也有着不错的销量
办理健康证明,要缴费100元?日前,针对市民反映的医院办理健康证明要求缴费100元一事,河南邓州市政府网站刊发了涉事的邓州市第二人民医院回应称,收取的费用为胸片血常规等检查费,不违规。有市民此前通过网络介绍,本2021年中国数据库行业研究报告核心摘要中国数据库市场规模据艾瑞统计,2020年中国数据库市场总规模达247。1亿元,同比增长16。2。未来三年预计将保持高增长,多方面积极因素促成1)政策扶持国产化和数字化转型带2021年下沉市场专题研究报告母婴篇核心摘要人口出生率逐年下降,全面二胎政策在一定程度上减缓了趋势,母婴市场仍可期。新生代父母注重产品品质,在能力范围内愿意给孩子最好的。针对进口品牌而言,在坚持下沉策略的基础上,强化艾瑞中国零售数字化转型研究报告解读核心摘要伴随社会经济的发展,三大产业的数字化渗透率逐渐提高,传统零售不断向新零售演进。用户为王阶段,人的数据化价值将反哺生产渠道销售运营等全场景,零售企业需要以用户数据为生产要素,2021年中国素质教育行业趋势洞察报告核心摘要关键变化政策规范下的新挑战和新机遇行业合规成本提升,但同时行业发展更加良性,利好规范经营和具有优质教育理念的机构家长代际变迁下的素质教育理念升级除关注显性技能外,新生代家长2021年中国即时零售行业研究报告核心摘要中国网络零售由以B2C电商平台为主,发展至B2CO2O平台多业态并存局面。2020年年初新冠疫情爆发,线上消费展现出强劲的活力和韧性,成为消费市场的稳定器,网上零售规模持续2021年中国第三方支付行业研究报告核心摘要行业现状第三方支付凭借其便捷高效安全的支付体验,使得中国的支付市场成为国际领先的支付市场之一。远C端企业需要通过创新的支付体验以及完整的行业解决方案来提升自身的效率。所以,2021年中国跨境海淘行业白皮书核心摘要根据艾瑞咨询测算,2020年,中国跨境进口零售电商的市场规模约为2050亿元,预计在未来政策疫情消费等各类环境趋于稳定的前提下,20212025年行业年均复合增速可维持在22021年中国跨境电商出口物流服务商行业研究报告核心摘要跨境电商出口物流行业受益于以下三方面持续向前发展1)国家对物流行业地位认同以及对跨境电商出口物流这一新业态的政策支持2)跨境出口电商平台的不断增长3)智能技术与传统物流行业2021金瑞奖征集评选正式启动金瑞奖始于2006年,由艾瑞咨询主办,以第三方视角洞察新经济领域发展现状,旨在对中国新经济互联网行业做出杰出贡献的企业企业家科学家等予以表彰和奖励。金瑞奖历经13年岁月的打磨和沉淀2021年中国全屋WiFi白皮书核心摘要中国家庭WiFi现状运营商提速WiFi6技术升级异构组网为智慧家庭多样化多场景智能互联需求提供了技术基础目前家庭WiFi主要痛点是WiFi稳定性和覆盖方面存在不足。全屋Wi