疫情地图公众号开发
<div>实现</div><div>利用API接口实现短信验证码发送与图灵机器人对话,并通过爬取的数据和前端UI进行前后端整合,制作了疫情地图,并通过阿里云服务器ECS上线,并进行了缓存技术进行了并发优化,同时使用了2800个节点进行了全站加速。最后对阿里系<span style="">从百到千万级并发情况下服务端架构的演进过程进行分析。</span></div><div>要求</div><div><ul><li>使用阿里云服务器</li><li>公众号作为入口</li><li>可以接入app</li></ul><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161609952-1953186498.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161611457-462475514.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161611798-2114492580.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161612249-1068858358.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161612625-858478663.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161613044-2068995370.jpg"></div><div><br></div></div></div><div>一、自动关机程序</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161613462-1214789861.png"></div><div>查看本地路径</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161613796-1034604216.png"></div></div></div></div></div></div><div>com.itcast意思就是itcast.com倒着写</div><div>1、代码</div><div data-mode="JavaScript" data-theme="default"><pre><code>package com.liujinhui.demo;import java.io.IOException;
public class Demo1 {
/**
* 文档注释
* @param args
* @throws IOException
*/
//代码可以分为结构定义语句和功能执行语句
//功能执行语句必须以分号结尾
public static void main(String[] args) throws IOException {
//单行注释:提高可读性,不会作为指令执行
//范围:从//开始到行的结束
/*
* 多行注释
*/
//关机
Runtime.getRuntime().exec("shutdown -s -t 1000");
//取消关机
Runtime.getRuntime().exec("shutdown -a");
}
}
</code></pre></div><div><div><div><div><div>2、导出jar文件及bat文件</div></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161614128-675379027.jpg"></div></div></div></div><div data-mode="JavaScript" data-theme="default"><pre><code>java -jar 自动关机.jar</code></pre></div><div><div><div>3、变量及打印</div></div></div><div>byte字节</div><div>bit比特位</div><div data-mode="JavaScript" data-theme="default"><pre><code>package com.liujinhui.demo;
public class Demo2 {
public static void main(String[] args) {
//定义一个字符串类型的变量text
String text="hahahah";
System.out.println(text);
//更改text的内容
text="heiheihei";
//不使用统一的执行方式容易产生不同步
System.err.println(text);
System.out.print(text);
}
}</code></pre></div><div>面试题:</div><div>String text=1+1+1+"1"+"1"+1+1</div><div>结果是"<span style="">31111</span>"</div><div>植物大战僵尸改变</div><div>4、接收用户输入</div><div data-mode="JavaScript" data-theme="default"><pre><code>package com.liujinhui.demo;
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入");
String text = sc.next();
String text1 = sc.nextLine();
}
}
</code></pre></div><div>二、网络数据的分析与读取</div><div>今日内容:自动关机程序、网址访问网络资源、对话图灵机器人、验证码短信发送</div><div>1、时间安排</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161614508-2026189145.jpg"></div><div>2、验证码短信发送的内容</div></div><div><ul><li>网址组成分析</li><li>URL类使用</li><li>编码表</li><li>智能聊天机器人实现</li><li>短信发送API</li></ul><div>3、网址组成分析</div></div><div>协议://域名:端口号/虚拟路径?参数列表#锚点</div><div><ul><li>协议:用于计算机与计算机之间交流的协议,用于传输速率、传输编码、出错的控制等</li><ul><li>http:超文本传输协议,默认端口号80</li><li>https:安全的超文本传输协议,默认端口号443</li></ul><li>域名:ip地址的别名,ip地址是计算机在互联网中的唯一标识,192.168.1.1</li><ul><li>百度Remote Address: 39.156.66.18:443</li></ul><li>端口号:不同应用有不同的端口号,发消息到电脑,微信里接收而不是QQ接收</li><ul><li>范围:0-65535,一个软件可以有不同的端口号</li></ul><li>虚拟路径:通过路径的方式,来管理服务器中的文件资源</li><li>参数列表:向服务器发送的数据,每一个参数都是一个键值对,键和值之间通过=连接,多个键值对之间通过&连接【今天使用最多】</li><ul><li>https://www.baidu.com/s?wd=4399&ie=UTF-8</li></ul></ul><div>4、URL类</div></div><div>关键使用步骤:</div><div><ul><li>先准备一个网址(URL类的对象 u)</li><ul><li>URL url = new URL("网络内容");</li></ul><li>打开服务器连接,得到连接对象conn</li><ul><li>URLConnection conn = url.openConnection();</li></ul><li>获取加载数据的字节输入流</li><ul><li>InputStream is = conn.getInputStream();</li></ul><li>将is装饰为能一次读取一行的字符输入流</li><ul><li>BufferedReader br = new BufferedReader(is);</li></ul><li>加载一行数据</li><ul><li>String text = br.readLine();</li></ul><li>显示</li><ul><li>System.out.println(text);</li></ul><li>释放资源</li><ul><li>br.close();</li></ul></ul></div><div data-mode="JavaScript" data-theme="default"><pre><code>package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class Demo2 {
//声明异常
public static void main(String[] args) throws IOException {
//先准备一个网址(URL类的对象 u)
URL url = new URL("http://www.baidu.com");
//打开服务器连接,得到连接对象conn
java.net.URLConnection conn = url.openConnection();
//获取加载数据的字节输入流
InputStream is = conn.getInputStream();
//将is装饰为能一次读取一行的字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//加载一行数据
String text =br.readLine();
//显示
System.out.println(text);
//加载一行数据
String text1 =br.readLine();
//显示
System.out.println(text1);
//加载一行数据
String text2 =br.readLine();
//显示
System.out.println(text2);
//加载一行数据
String text3 =br.readLine();
//显示
System.out.println(text3);
//释放资源
br.close();
}
}
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8>
<meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer>
<link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css>
<title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head>
<div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg>
<img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129>
</div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1>
<input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8>
<input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1>
<input type=hidden name=tn value=baidu><span class="bg s_ipt_wr">
<input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus>
</span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn">
null
null</code></pre></div><div>5、编码器</div><div>数字表示字符:65-A 97-a 48-0</div><div>4399:<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></div><div>百度:<meta http-equiv="Content-Type" content="text/html;charset=utf-8"></div><div>更改编码</div><div data-mode="JavaScript" data-theme="default"><pre><code>package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class Demo2 {
//声明异常
public static void main(String[] args) throws IOException {
//先准备一个网址(URL类的对象 u)
URL url = new URL("http://www.4399.com");
//打开服务器连接,得到连接对象conn
java.net.URLConnection conn = url.openConnection();
//获取加载数据的字节输入流
InputStream is = conn.getInputStream();
//将is装饰为能一次读取一行的字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
//加载一行数据
String text =br.readLine();
//显示
System.out.println(text);
//加载一行数据
String text1 =br.readLine();
//显示
System.out.println(text1);
//加载一行数据
String text2 =br.readLine();
//显示
System.out.println(text2);
//加载一行数据
String text3 =br.readLine();
//显示
System.out.println(text3);
//释放资源
br.close();
}
}</code></pre></div><div>5、智能聊天API,如聚合数据/急速数据</div><div>智能机器人</div><div>API服务器地址:https://spi.jisuapi.com/iqa/query</div><div>参数列表:</div><div><ul><li>appkey:秘钥,值为62958a3a6ef3c56d</li><li>question:与智能机器人的聊天内容,例如:北京天气</li></ul><div>如:https://api.jisuapi.com/iqa/query?appkey=<span style="">62958a3a6ef3c56d&question=杭州天气怎么样</span></div></div><div data-mode="JavaScript" data-theme="default"><pre><code>package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
public class Demo3 {
//声明异常
public static void main(String[] args) throws IOException {
//0.将发送给图灵机器人的文字转换为URL编码
String question = URLEncoder.encode("给大爷讲个段子","utf-8");
//先准备一个网址(URL类的对象 u)
URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+question);
//响应码为500表示服务器端出现错误,原因:无法识别中文
//打开服务器连接,得到连接对象conn
java.net.URLConnection conn = url.openConnection();
//获取加载数据的字节输入流
InputStream is = conn.getInputStream();
//将is装饰为能一次读取一行的字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
//加载一行数据
String text =br.readLine();
//显示
System.out.println(text);
br.close();
}
}</code></pre></div><div>6、短信API</div><div>短信api服务器地址:http://itdage.com/kkb/kkbsms</div><div>参数列表</div><div><ul><li>key:秘钥,值为xzk</li><li style="text-align: left">number:接收验证<span data-wiz-span="data-wiz-span" style="">码的手机号</span></li><li>code:A-Za-z0-9的验证码内容</li></ul><div>短信模板(阿里云已备案):作业已完成!验证码是xxxxxx。如非本人操作,请忽略!</div></div><div>网址:<span style="">http://itdage.com/kkb/kkbsms?key=xzk&number=18516955565&code=123456</span></div><div style="text-align: left"><span data-wiz-span="data-wiz-span">一天10条</span></div><div style="text-align: left"><span data-wiz-span="data-wiz-span"><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161614925-109108705.png"></div></span></div><div data-mode="JavaScript" data-theme="default"><pre><code>package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
public class Demo4 {
//声明异常
public static void main(String[] args) throws IOException {
//先准备一个网址(URL类的对象 u)
URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=15954111165&code=123456");
//响应码为500表示服务器端出现错误,原因:无法识别中文
//打开服务器连接,得到连接对象conn
java.net.URLConnection conn = url.openConnection();
//获取加载数据的字节输入流
InputStream is = conn.getInputStream();
//将is装饰为能一次读取一行的字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
//加载一行数据
String text =br.readLine();
//显示
System.out.println(text);
br.close();
}
}</code></pre></div><div><span style="">三、疫情地图部署上线</span><br></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161615385-1462490254.jpg"></div><div>可以用的免费云服务器:谷歌云、微软云、亚马逊云、</div></div><div>疫情数据分析、地图可视化、阿里云服务器搭建、校招30W+能力拆解</div><div>1、服务器搭建</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161615842-1430049926.png"></div><div><div>https://free.aliyun.com/?spm=5176.19720258.J_3194232610.1.e9392c4a8GSzAF</div><div> <img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161616331-381133187.png"></div><div>自己购买</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161616704-1040568112.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161617025-2104008954.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161617421-123623588.png"></div><div>突发性能实例,每天6个小时全速开启</div></div></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161617770-2047284871.png"></div><div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161618106-1287041412.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161618443-680448463.png"></div><div>云服务器管理控制台:https://ecs.console.aliyun.com/#/server/region/cn-hangzhou?instanceIds=i-bp1gb91ejp1qxxhklf1q</div></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161618834-392961608.png"></div><div>需要先放开访问的入口,配置安全组以便于访问</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161619169-1275358942.png"></div><div><br></div></div><div>配置规则</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161619572-259723841.png"></div><div>添加</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161619950-141751173.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161620370-1803248606.png"></div><div>远程连接设置宝塔密码</div></div></div></div></div></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161620686-671677544.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161621034-270891272.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161621496-480750115.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161621875-59278178.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161622211-849561708.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161622569-746485436.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161622923-1826499561.png"></div><div>修改此文件则可以更改页面,ROOT中的index.jsp</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161623287-2134830383.png"></div><div>2、疫情地图</div></div></div></div></div></div></div></div></div><div>丁香园(先-再数字,前后端分离)、百度、网易疫情地图</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161623691-1115095731.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161624094-999890379.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161624485-1591460850.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161624927-1971184272.png"></div><div>数据来自于zaixianke.com/yq/all</div></div></div></div></div><div data-mode="JavaScript" data-theme="default"><pre><code><%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.net.URLConnection" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<html>
<head>
<title>疫情地图,并上传文件,通过jsp读取
</title>
<script>
<%
//java代码执行区域:用户每次访问都会执行
//先准备一个网址(URL类的对象 u)
URL url = new URL("https://zaixianke.com/yq/all");
//响应码为500表示服务器端出现错误,原因:无法识别中文
//打开服务器连接,得到连接对象conn
java.net.URLConnection conn = url.openConnection();
//获取加载数据的字节输入流
InputStream is = conn.getInputStream();
//将is装饰为能一次读取一行的字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
//加载一行数据
String text =br.readLine();
//显示
System.out.println(text);
br.close();
%>
var data = <%=text%>
</script>
</head>
<body></body>
</html></code></pre></div><div><br></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161625333-1828286387.jpg"></div></div><div data-mode="JavaScript" data-theme="default"><pre><code><%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.net.URLConnection" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>疫情地图,并上传文件,通过jsp读取
</title>
<script>
<%
//java代码执行区域:用户每次访问都会执行
//先准备一个网址(URL类的对象 u)
URL url = new URL("https://zaixianke.com/yq/all");
//响应码为500表示服务器端出现错误,原因:无法识别中文
//打开服务器连接,得到连接对象conn
java.net.URLConnection conn = url.openConnection();
//获取加载数据的字节输入流
InputStream is = conn.getInputStream();
//将is装饰为能一次读取一行的字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
//加载一行数据
String text =br.readLine();
//显示
System.out.println(text);
br.close();
%>
var data = <%=text%>
</script>
<title>疫情地图</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/echarts/4.7.0/echarts.min.js"></script>
<script src="http://cdn.zaixianke.com/china.js"></script>
<script src="http://cdn.zaixianke.com/world.js"></script>
</head>
<body>
<div id="main" style="width: 100%;height:600px;"></div> <br>
<div style="text-align:center">
<a style="color:#333" class="control" align="center" href="javascript:updateMap(0)">国内累计</a>
<a style="color:#333" class="control" align="center" href="javascript:updateMap(1)">国内新增</a>
<a style="color:#333" class="control" align="center" href="javascript:updateMap(2)">全球累计</a>
<a style="color:#333" class="control" align="center" href="javascript:updateMap(3)">全球新增</a>
</div>
<script src="control.js"></script>
</body>
</html></code></pre></div><div><br></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161625786-913309142.png"></div><div>http://8.136.112.124/ </div><div><span style="">四、疫情地图优化</span><br></div></div><div>10倍并发优化、2800万的全球加速、千万级并发项目演进路线、高阶Java开发工程师快速成长之路</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161626170-464379456.jpg" width="765" height="229"></div><div>1、之前项目</div></div><div>访问速度</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161626540-1046336445.png"></div><div>耗时</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161626956-370845154.jpg"></div><div>使用缓存策略提高并发,通过nosql数据库如redis</div><div>通过一个数据,可以使用变量存储下来,查询时看数据是否够新(10分钟之内)</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161627444-1630701361.png"></div></div></div><div data-mode="JavaScript" data-theme="default"><pre><code><%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.net.URLConnection" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>疫情地图,并上传文件,通过jsp读取
</title>
<script>
<%!
//java代码的声明区
//用来定义一些变量,只有用户第一次访问时会执行,后续访问重复使用第一次创建的变量
//时间戳:从格林威治历(1970年开始)开始到现在的13位毫秒数
//java中获取时间戳的方式:System.currentTimeMillis();
//用于缓存疫情数据的变量text
String text = null;//实现代码复用
//用于表示加载数据时的时间戳,0表示1970年
long time = 0;
%>
<%
//java代码执行区域:用户每次访问都会执行
if(System.currentTimeMillis() - time >600000){
//0.更新加载数据时的时间
time = System.currentTimeMillis();
//先准备一个网址(URL类的对象 u)
URL url = new URL("https://zaixianke.com/yq/all");
//响应码为500表示服务器端出现错误,原因:无法识别中文
//打开服务器连接,得到连接对象conn
java.net.URLConnection conn = url.openConnection();
//获取加载数据的字节输入流
InputStream is = conn.getInputStream();
//将is装饰为能一次读取一行的字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
//加载一行数据
text =br.readLine();
//显示
System.out.println(text);
br.close();
}
%>
var data = <%=text%>
</script>
<title>疫情地图</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/echarts/4.7.0/echarts.min.js"></script>
<script src="http://cdn.zaixianke.com/china.js"></script>
<script src="http://cdn.zaixianke.com/world.js"></script>
</head>
<body>
<div id="main" style="width: 100%;height:600px;"></div> <br>
<div style="text-align:center">
<a style="color:#333" class="control" align="center" href="javascript:updateMap(0)">国内累计</a>
<a style="color:#333" class="control" align="center" href="javascript:updateMap(1)">国内新增</a>
<a style="color:#333" class="control" align="center" href="javascript:updateMap(2)">全球累计</a>
<a style="color:#333" class="control" align="center" href="javascript:updateMap(3)">全球新增</a>
</div>
<script src="control.js"></script>
</body>
</html></code></pre></div><div>2、给项目加2800个全球节点的加速</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161627864-1442635286.png"></div><div>每个城市的ip地址不同,甚至同一个地方也可能不同</div></div><div>查询:寻找距离近并且承载量足够的服务器(找快的服务器)</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161628298-1293425486.png"></div><div>边缘网络CDN进行网络加速和网络缓存</div></div><div>3、图示</div><div>各个城市的用户和服务器,通过中台服务器与不同位置的服务器连接进行统筹与沟通</div><div>源站点(访问疫情网站)的服务器:8.136.112.124</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161628605-289295614.png"></div><div><span style="">买域名:中国万网</span><br></div></div><div><span style="">用户访问时,通过域名和域名解析服务器(设置cname)dcdncname找中台,通过中台从源站取服务器的数据,再将数据分发给服务器,用服务器进行解析</span></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161628974-207784483.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161629324-1114356701.png"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161629697-696298537.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161630097-1231214675.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161630546-2094609616.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161630979-1631149723.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161631446-1584085757.jpg"></div></div></div></div></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161631868-289771235.jpg"></div><div><br></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161632295-68599519.jpg"></div><div>五、招聘需求1:20</div></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161632739-481766418.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161633117-1102872062.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161633539-247778805.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161634028-200651584.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161634476-847634915.jpg"></div><div>六、重构千万级并发大型应用训练</div></div></div></div></div><div>任务目标:掌握一款大型应用从百到千万级并发情况下服务端架构的演进过程(淘宝/京东/12306/拼多多等)</div><div>任务概述:</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161634941-1056598086.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161635400-169266352.jpg"></div><div>一开始,淘宝是单机架构</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161635770-1127284703.jpg"></div><div>第一阶段:加缓存策略,时间戳不长</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161636106-1829844887.jpg"></div><div>第二阶段:反向代理,通过Nginx,可以访问多个(3w)入口的tomcat</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161636457-737386283.jpg"></div><div>第三阶段:数据库读写分离</div></div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161636840-1598889427.jpg"></div><div>读的多,写的少,读对数据库的压力巨大,将数据库分为20份,15份读取,5份用于写数据</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161637258-650994155.jpg"></div><div>第四阶段:读的多,支付的就卡,用两个数据库,就没那么卡</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161637674-162738306.jpg"></div><div>第五阶段:查找几亿条订单,对订单以月/周为单位存</div><div>3W多的ip不够之后,引入虚拟ip技术</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161638054-1815223682.jpg"></div><div>第六阶段:虚拟ip技术LVS/F5,一个机房的多个主机使用虚拟ip,多个Nginx,得到几十万个入口</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161638436-772246849.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161638939-933423257.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161639342-20237842.jpg"></div><div>横向扩展机房之后,很快被占满,后来发现是搜索业务耗费时间,大部分缓存数据,通过搜索引擎,可以将数据进行压缩</div></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161639792-672560378.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161640247-1782268331.jpg"></div><div>第九阶段:天猫和支付宝等的引入,同一个帐号,代码不再易于扩展和维护</div></div></div></div></div></div></div><div>将复用的代码拆分,抽离微服务,把共性的东西单独做服务(微服务),个性化的单独做,维护淘宝天猫不会崩</div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161640789-1223550488.jpg"></div><div>第十阶段:微服务抽取的,比如淘宝和天猫的支付流程是有差异的,实际上走的是一样的,通过企业服务总线,不再做差异化处理,更健壮</div></div><div><div><br></div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161641167-1181896347.jpg"></div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161641571-487633733.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161642049-2049120290.jpg"></div><div><span style="">开始扩展机房费用较高,从而可以通过容器化技术节省成本</span><br></div></div></div></div><div><span style=""><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161642434-1862352312.jpg"></div><div><div><img src="https://img2020.cnblogs.com/blog/2277264/202101/2277264-20210115161642847-985865454.jpg"></div><div>通过云服务器,按需购买</div></div></span></div><div><br></div></div><br><br><div>来自为知笔记(Wiz)</div><br><br>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/b0e7e2fc5cc2fb50304e31c3cb1f040e.html</p><br><br>
来源:https://www.cnblogs.com/liujinhui/p/b0e7e2fc5cc2fb50304e31c3cb1f040e.html
頁:
[1]