`
xitong
  • 浏览: 6158760 次
文章分类
社区版块
存档分类
最新评论

淘宝服务器架构框架图,简单实现....

 
阅读更多

这几天闲着没事从老男孩老师看到一个淘宝网的框架图,挺感兴趣的,cdn和集群线上的架构我都做过,但是没有接触过这么大的环境,先简单的实现看看, 当然了真正的淘宝架构肯定不能像我这样的,但是自己过过实验瘾也挺爽的。

陆续的把脚本贴出来。。。

脚本有不严谨的地方,请大家指出。。。。。

脚本的ip貌似和图上都对不上,自己修改和增加吧~~~~~~~~~

说实话,lvs配置是最简单,没什么好配置的,集群环境我用lvs较少,因为没有正则的功能,当然了他作为4层的东西,优势在于大流量的承载转发。

  1. mkdir/usr/local/src/lvs
  2. cd/usr/local/src/lvs
  3. wgethttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
  4. wgethttp://www.keepalived.org/software/keepalived-1.1.15.tar.gz
  5. lsmod|grepip_vs
  6. uname-r
  7. ln-s/usr/src/kernels/$(uname-r)/usr/src/linux
  8. tarzxvfipvsadm-1.24.tar.gz
  9. cdipvsadm-1.24
  10. make&&makeinstall
  11. tarzxvfkeepalived-1.1.15.tar.gz
  12. cdkeepalived-1.1.15
  13. ./configure&&make&&makeinstall
  14. cp/usr/local/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/
  15. cp/usr/local/etc/sysconfig/keepalived/etc/sysconfig/
  16. mkdir/etc/keepalived
  17. cp/usr/local/etc/keepalived/keepalived.conf/etc/keepalived/
  18. cp/usr/local/sbin/keepalived/usr/sbin/
  19. #youcanservicekeepalivedstart|stop
  20. #master
  21. cat>>/usr/local/etc/keepalived/keepalived.conf<<EOF
  22. !ConfigurationFileforkeepalived
  23. global_defs{
  24. notification_email{
  25. rfyiamcool@163.com
  26. }
  27. notification_email_fromAlexandre.Cassen@firewall.loc
  28. smtp_server127.0.0.1
  29. router_idLVS_DEVEL
  30. }
  31. vrrp_instanceVI_1{
  32. stateMASTER # other backup
  33. interfaceeth0
  34. virtual_router_id51
  35. priority100 # other 90
  36. advert_int1
  37. authentication{
  38. auth_typePASS
  39. auth_pass1111
  40. }
  41. virtual_ipaddress{
  42. 10.10.10.88
  43. }
  44. }
  45. virtual_server10.10.10.8880{
  46. delay_loop6
  47. lb_algorr
  48. lb_kindDR
  49. persistence_timeout50
  50. protocolTCP
  51. real_server10.10.10.2180{
  52. weight3
  53. TCP_CHECK{
  54. connect_timeout10
  55. nb_get_retry3
  56. delay_before_retry3
  57. connect_port80
  58. }
  59. }
  60. real_server10.10.10.2280{
  61. weight3
  62. TCP_CHECK{
  63. connect_timeout10
  64. nb_get_retry3
  65. delay_before_retry3
  66. connect_port80
  67. }
  68. }
  69. }
  70. EOF
  71. servicekeepalivedstart

咱们先把二层的haproxy搞定,ip什么的大家自己改吧。

  1. #!/bin/bash
  2. cd/usr/local/src/
  3. wgethttp://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
  4. tarzxfhaproxy-1.4.8.tar.gz
  5. cdhaproxy-1.4.8
  6. uname-a
  7. makeTARGET=linux26PREFIX=/usr/local/haproxy
  8. makeinstallPREFIX=/usr/local/haproxy
  9. cat>>/usr/local/haproxy/haproxy.cfg<<EOF
  10. global
  11. log127.0.0.1local0###全局日志
  12. maxconn4096###最大连接数
  13. chroot/usr/local/haproxy
  14. uid501###用户ID
  15. gid501###组ID
  16. daemon###后台运行
  17. nbproc1###创建进程数
  18. pidfile/usr/local/haproxy/haproxy.pid###pid文件
  19. defaults
  20. log127.0.0.1local3
  21. modehttp###支持的模式
  22. optionhttplog###日志格式
  23. optionhttpclose###请求完成后关闭http通道
  24. optiondontlognull
  25. optionforwardfor###apache日志转发
  26. optionredispatch
  27. retries2###重连次数
  28. maxconn2000
  29. balanceroundrobin###算法类型
  30. statsuri/haproxy-stats###状态统计页面
  31. #statsauthadmin:admin###状态统计页面用户名密码,可选
  32. contimeout5000###连接超时
  33. clitimeout50000###客户端超时
  34. srvtimeout50000###服务器超时
  35. listenproxy*:80###访问地址及端口
  36. optionhttpchkHEAD/index.htmlHTTP/1.0###健康检查页面
  37. serverweb210.10.10.30:88cookieapp1inst2checkinter2000rise2fall5
  38. serverweb210.10.10.31:88cookieapp1inst2checkinter2000rise2fall5
  39. serverweb210.10.10.32:88cookieapp1inst2checkinter2000rise2fall5
  40. serverweb210.10.10.33:88cookieapp1inst2checkinter2000rise2fall5
  41. serverweb210.10.10.34:88cookieapp1inst2checkinter2000rise2fall5
  42. serverweb210.10.10.35:88cookieapp1inst2checkinter2000rise2fall5
  43. EOF
  44. cat>>/etc/init.d/haproxy<<EOF
  45. #!/bin/sh
  46. set-e
  47. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
  48. PROGDIR=/usr/local/haproxy
  49. PROGNAME=haproxy
  50. DAEMON=\$PROGDIR/sbin/\$PROGNAME
  51. CONFIG=\$PROGDIR/\$PROGNAME.cfg
  52. PIDFILE=\$PROGDIR/\$PROGNAME.pid
  53. DESC="HAProxydaemon"
  54. SCRIPTNAME=/etc/init.d/\$PROGNAME
  55. #Gracefullyexitifthepackagehasbeenremoved.
  56. test-x\$DAEMON||exit0
  57. start()
  58. {
  59. echo-n"Starting\$DESC:\$PROGNAME"
  60. \$DAEMON-f\$CONFIG
  61. echo"."
  62. }
  63. stop()
  64. {
  65. echo-n"Stopping\$DESC:\$PROGNAME"
  66. haproxy_pid=cat/usr/local/haproxy/haproxy.pid
  67. kill\$haproxy_pid
  68. echo"."
  69. }
  70. restart()
  71. {
  72. echo-n"Restarting\$DESC:\$PROGNAME"
  73. \$DAEMON-f\$CONFIG-p\$PIDFILE-sf\$(cat\$PIDFILE)
  74. echo"."
  75. }
  76. case"\$1"in
  77. start)
  78. start
  79. ;;
  80. stop)
  81. stop
  82. ;;
  83. restart)
  84. restart
  85. ;;
  86. *)
  87. echo"Usage:\$SCRIPTNAME{start|stop|restart}">&2
  88. exit1
  89. ;;
  90. esac
  91. exit0
  92. EOF
  93. chmod+x/etc/rc.d/init.d/haproxy
  94. chkconfig--addhaproxy
  95. chmod777/usr/local/haproxy/haproxy.pid
  96. sed-i'/SYSLOGD_OPTIONS/c\SYSLOGD_OPTIONS="-r-m0"'/etc/sysconfig/syslog
  97. echo"local3.*/var/log/haproxy.log"/etc/syslog.conf
  98. echo"local0.*/var/log/haproxy.log"/etc/syslog.conf
  99. servicesyslogrestart
  100. #启动haproxy
  101. #/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg
  102. #重启haproxy
  103. #/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg-st`cat/usr/local/haproxy/haproxy.pid`
  104. #停止haproxy
  105. #killallhaproxy
  106. #servicehaproxystartrestartstop

haproxy是识别主机名的判断的 主机名的判断的例子格式如下:

  1. aclurl_aaahdr_dom(host)www.aaa.com
  2. aclurl_bbbhdr_dom(host)www.bbb.com
  3. acltm_policyhdr_dom(host)-itrade.gemini.taobao.net
  4. acldenali_policyhdr_reg(host)-i^(my.gemini.taobao.net|auction1.gemini.taobao.net)$
  5. aclpath_url163path_beg-i/163
  6. aclpath_url_bbbpath_beg-i/
  7. use_backendaaaifurl_aaa
  8. use_backendbbbifurl_bbb
  9. use_backendurl163ifurl_aaapath_url163
  10. backendurl163
  11. modehttp
  12. balanceroundrobin
  13. optionhttpchkGET/163/test.jsp
  14. serverurl16310.10.10.31:8080cookie1checkinter2000rise3fall3maxconn50000
  15. backendaaa
  16. modehttp
  17. balanceroundrobin
  18. optionhttpchkGET/test.jsp
  19. sreverapp_808010.10.10.32:8080cookie1checkinter1500rise3fall3maxconn50000
  20. backendbbb
  21. modehttp
  22. balanceroundrobin
  23. optionhttpchkGET/test.jsp
  24. sreverapp_808010.10.10.33:8090cookie1checkinter1500rise3fall3maxconn50000

haproxy端还要做lvs客户端模式,绑定回环口。

  1. #!/bin/bash
  2. SNS_VIP=10.10.10.88
  3. source/etc/rc.d/init.d/functions
  4. case"$1"in
  5. start)
  6. ifconfiglo:0$SNS_VIPnetmask255.255.255.255broadcast$SNS_VIP
  7. /sbin/routeadd-host$SNS_VIPdevlo:0
  8. echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore
  9. echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce
  10. echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore
  11. echo"2">/proc/sys/net/ipv4/conf/all/arp_announce
  12. echo"RealServerStartOK"
  13. ;;
  14. stop)
  15. ifconfiglo:0down
  16. routedel$SNS_VIP>/dev/null2>&1
  17. echo"0">/proc/sys/net/ipv4/conf/lo/arp_ignore
  18. echo"0">/proc/sys/net/ipv4/conf/lo/arp_announce
  19. echo"0">/proc/sys/net/ipv4/conf/all/arp_ignore
  20. echo"0">/proc/sys/net/ipv4/conf/all/arp_announce
  21. echo"RealServerStoped"
  22. ;;
  23. *)
  24. echo"Usage:$0{start|stop}"
  25. exit1
  26. esac
  27. exit0

下面是squid的设置

  1. #!/bin/bash
  2. wgethttp://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE6.tar.bz2
  3. tarjxvfsquid-2.6.STABLE6.tar.bz2
  4. ./configure--prefix=/usr/local/squid\
  5. --enable-async-io=320\
  6. --enable-storeio="aufs,diskd,ufs"\
  7. --enable-useragent-log\
  8. --enable-referer-log\
  9. --enable-kill-parent-hack\
  10. --enable-forward-log\
  11. --enable-snmp\
  12. --enable-cache-digests\
  13. --enable-default-err-language=Simplify_Chinese\
  14. --enable-epoll\
  15. --enable-removal-policies="heap,lru"\
  16. --enable-large-cache-files\
  17. --disable-internal-dns\
  18. --enable-x-accelerator-vary\
  19. --enable-follow-x-forwarded-for\
  20. --disable-ident-lookups\
  21. --with-large-files\
  22. --with-filedescriptors=65536
  23. cat>>/usr/local/squid/etc/squid.conf<<EOF
  24. visible_hostnamecache1.taobao.com
  25. http_port192.168.1.44:80vhostvport
  26. icp_port0
  27. cache_mem512MB
  28. cache_swap_low90
  29. cache_swap_high95
  30. maximum_object_size20000KB
  31. maximum_object_size_in_memory4096KB
  32. cache_dirufs/tmp1300032256
  33. cache_store_lognone
  34. emulate_httpd_logon
  35. efresh_pattern^ftp:144020%10080
  36. refresh_pattern^gopher:14400%1440
  37. refresh_pattern.020%4320
  38. negative_ttl5minutes
  39. positive_dns_ttl6hours
  40. negative_dns_ttl1minute
  41. connect_timeout1minute
  42. read_timeout15minutes
  43. request_timeout5minutes
  44. client_lifetime1day
  45. half_closed_clientson
  46. maximum_single_addr_tries1
  47. uri_whitespacestrip
  48. ie_refreshoff
  49. logformatcombined%>a%ui%un[%tl]"%rm%ruHTTP/%rv"%Hs%<st"%{Referer}>h""%{User-Agent}>h"%Ss:%Sh
  50. pid_filename/var/log/squid/squid.pid
  51. cache_log/var/log/squid/cache.log
  52. access_log/var/log/squid/access.logcombined
  53. aclallsrc0.0.0.0/0.0.0.0
  54. aclQUERYurlpath_regexcgi-bin.php.cgi.avi.wmv.rm.ram.mpg.mpeg.zip.exe
  55. cachedenyQUERY
  56. aclpicurlurl_regex-i\.bmp$\.png$\.jpg$\.gif$\.jpeg$
  57. aclmystie1referer_regex-iaaa
  58. http_accessallowmystie1picurl
  59. aclmystie2referer_regex-ibbb
  60. http_accessallowmystie2picurl
  61. aclnullrefreferer_regex-i^$
  62. http_accessallownullref
  63. aclhasrefreferer_regex-i.+
  64. http_accessdenyhasrefpicurl
  65. cache_peer192.168.1.7parent800no-queryoriginserverno-digestname=all
  66. cache_peer_domainall*.taobao.com
  67. cache_effective_usernobody
  68. cache_effective_groupnobody
  69. acllocalhostsrc127.0.0.1
  70. aclmy_other_proxysrcdomain.a.com
  71. follow_x_forwarded_forallowlocalhost
  72. follow_x_forwarded_forallowall#允许转发headip头
  73. acl_uses_indirect_clienton#只有2.6才有这这个个参数
  74. delay_pool_uses_indirect_clienton#只有2.6才有这这个个参数
  75. log_uses_indirect_clienton#只有2.6才有这这个个参数
  76. #refresh_pattern^ftp:6020%10080
  77. #refresh_pattern^gopher:600%1440
  78. #refresh_pattern^gopher:600%1440
  79. #refresh_pattern.020%1440
  80. refresh_pattern-i\.js$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  81. refresh_pattern-i\.html$72050%1440 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  82. refresh_pattern-i\.jpg$144090%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  83. refresh_pattern-i\.gif$144090%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  84. refresh_pattern-i\.swf$144090%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  85. refresh_pattern-i\.jpg$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  86. refresh_pattern-i\.png$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  87. refresh_pattern-i\.bmp$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  88. refresh_pattern-i\.doc$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  89. refresh_pattern-i\.ppt$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  90. refresh_pattern-i\.xls$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  91. refresh_pattern-i\.pdf$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  92. refresh_pattern-i\.rar$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  93. refresh_pattern-i\.zip$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  94. refresh_pattern-i\.txt$144050%2880 reload-into-ims ignore-reload ignore-no-cache ignore-auth ignore-private
  95. EOF
  96. #建立缓存和日志目录,并改变权限使squid能写入
  97. mkdir/tmp1
  98. mkdir/var/log/squid
  99. chown-Rnobody:nobody/tmp1
  100. chmod666/tmp1
  101. chown-Rnobody:nobody/var/log/squid
  102. #首次运行squid要先建立缓存
  103. /usr/local/squid/sbin/squid-z
  104. #启动squid
  105. echo"65535">/proc/sys/fs/file-max
  106. ulimit-HSn65535
  107. /usr/local/squid/sbin/squid

缓存的清理脚本是从洒哥那里搞到的

只是根据洒哥的脚本很简单的延伸了下,以前那个分享的脚本可以去除域名和特定的文件格式,然后我就想了能不能去除一个网址的所有jpg 或者是 www.92hezu.com/123/bbb/ 这样的。 原来多家几个后缀,用grep过滤就ok了

qingli.sh www.xiuxiukan.com

qingli.sh jpg

qingli.sh xiuxiukan.com 123 bbb jpg

  1. #!/bin/sh
  2. squidcache_path="/squidcache"
  3. squidclient_path="/home/local/squid/bin/squidclient"
  4. #grep-a-r$1$squidcache_path/*|grep"http:"|awk-F'http:''{print"http:"$2;}'|awk-F\''{print$1}'>cache.txt
  5. if[["$1"=="swf"||"$1"=="png"||"$1"=="jpg"||"$1"=="ico"||"$1"=="gif"||"$1"=="css"||"$1"=="js"||"$1"=="html"||"$1"=="shtml"||"$1"=="htm"]];then
  6. grep-a-r.$1$squidcache_path/*|strings|grep"http:"|awk-F'http:''{print"http:"$2;}'|awk-F\''{print$1}'|grep"$1$"|uniq>cache.txt
  7. else
  8. grep-a-r$1$squidcache_path/*|strings|grep"http:"|grep$2$|grep$3$|grep$4$|grep$5$|grep$6$|awk-F'http:''{print"http:"$2;}'|awk-F\''{print$1}'|uniq>cache.txt
  9. fi
  10. sed-i"s/\";$//g"cache.txt
  11. catcache.txt|whilereadLINE
  12. do
  13. $squidclient_path-p80-mPURGE$LINE
  14. done

分享到:
评论

相关推荐

    java开源包3

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包101

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包4

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包10

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    基于SSM架构实现的大型分布式购物网站-B2C项目源码+项目说明.zip

    基于SSM架构实现的大型分布式购物网站-B2C项目源码+项目说明.zip # taotaoMalls 大型分布式购物网站-B2C项目(持续更新中) ##电商行业模式 - B2B:企业到企业、商家到商家。例如阿里巴巴。 - B2C:商家到客户。例如...

    java开源包1

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包11

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包2

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包6

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包5

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包8

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包7

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包9

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    Java资源包01

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    JAVA上百实例源码以及开源项目源代码

    Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Ke361开源淘宝客系统最新官方版

    2、实现后台程序在线更新(需服务器或空间支持) 3、增加手机模板 4、修改数据表结构goods和collect_goods,优化价格结构,同时修改采集api适应新的数据结构 5、修改更新淘宝、天猫数据时,只更新价格信息,不更新...

    ShopNC多用户商城 2.1 GBK 20120716.zip

    ShopNC多用户商城,采用了全新的框架体系,呈现给您不同于以往的操作模式,更简约的界面,更流畅的搜索机制,更具人性化的管理后台操作,更适应现在网络的运营模式解决方案,为您的创业之路打下了坚实的基础,你们的...

Global site tag (gtag.js) - Google Analytics