文章目录

  • Nginx
      • 摩拜单车整体流程
    • 简介
    • 安装
      • 下载
      • 安装
      • 安装目录
    • 配置负载均衡
      • 将服务发布到多台机器
    • 安装kafka插件
      • 安装nginx-kafka插件
    • 微信小程序对接nginx-kafka

Nginx

摩拜单车整体流程

简介

百度百科
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等

安装

下载

http://nginx.org/

安装

1.上传nginx安装包
2.解压nginx
tar -zxvf nginx-1.18.1.tar.gz -C /usr/local/src/
3.进入到nginx的源码目录
cd /usr/local/src/nginx-1.18.1/
4.预编译
./configure
5.安静gcc编译器
yum -y install gcc pcre-devel openssl openssl-devel
6.然后再执行
./configure
7.编译安装nginx,nginx被安装到/usr/local/nginx目录;/usr/local/src/nginx是源码,编译安装后可以删除。
make && make install
8.启动nginx
sbin/nginx
9.查看nginx进程
ps -ef | grep nginx

netstat -anpt | grep nginx

安装目录

配置负载均衡

将服务发布到多台机器

将springboot程序部署在多台服务器上,然后启动springboot
启动:java -jar niubike-0.0.1-SNAPSHOT.war >> ./logs 2>&1 &

修改nginx的配置文件,让nginx实现负载均衡功能
vi /usr/local/nginx/conf/nginx.conf

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;#响应数据的来源upstream tomcats { server n1:8888 weight=1;server n2:8888 weight=1;server n3:8888 weight=1;}server {listen       80;# 服务的名字随意server_name  n1;location ~ .* {proxy_pass http://tomcats;}
}




安装kafka插件

老的方案:通过flume将nignx中的日志文件采集到kafka中。
目的:将nginx中产生的日志直接存储到kafka。

安装nginx-kafka插件

1.安装git
yum install -y git
2.切换到/usr/local/src目录,然后将kafka的c客户端源码clone到本地
cd /usr/local/src
git clone https://github.com/edenhill/librdkafka
3.进入到librdkafka,然后进行编译
cd librdkafka
#克隆kafka的c,c++的客户端源码包到本地
yum install -y gcc gcc-c++ pcre-devel zlib-devel
./configure
make && make install
4.安装nginx整合kafka的插件,进入到/usr/local/src,clone nginx整合kafka的源码
cd /usr/local/src
#克隆kafka插件源码包到本地
git clone https://github.com/brg-liuwei/ngx_kafka_module

5.进入到nginx的源码包目录下 (编译nginx,然后将将插件同时编译)
cd /usr/local/src/nginx-1.12.2
#configure的本质就是预编译,检测是否缺少插件。
./configure --add-module=/usr/local/src/ngx_kafka_module/
make && make install

6.修改nginx的配置文件,详情请查看当前目录的nginx.conf

#user  nobody;
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;#gzip  on;kafka;kafka_broker_list n1:9092 n2:9092 n3:9092;  server {listen       80;server_name  n2;#charset koi8-r;#access_log  logs/host.access.log  main;location = /kafka/track {kafka_topic track;}location = /kafka/user {kafka_topic user;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

7.启动zk和kafka集群(创建topic)
/appdata/zookeeper/bin/zkServer_all.sh start
启动:/appdata/kafka/bin/kafka-server-start.sh -daemon /appdata/kafka/config/server.properties
创建topic:/appdata/kafka/bin/kafka-topics.sh --create --zookeeper n1:2181,n2:2181,n3:2181 --replication-factor 3 --partitions 3 --topic user
/appdata/kafka/bin/kafka-topics.sh --create --zookeeper n1:2181,n2:2181,n3:2181 --replication-factor 3 --partitions 3 --topic track
查看topic:/appdata/kafka/bin/kafka-topics.sh --describe --zookeeper n1:2181,n2:2181,n3:2181 --topic user

8.启动nginx,报错,找不到kafka.so.1的文件
error while loading shared libraries: librdkafka.so.1: cannot open shared object file: No such file or directory
在/usr/local/nginx启动,sbin/nginx -h

9.加载so库
echo “/usr/local/lib” >> /etc/ld.so.conf
ldconfig

10.测试,向nginx中写入数据,然后观察kafka的消费者能不能消费到数据
curl localhost/kafka/track -d “message send to kafka topic”
curl localhost/kafka/track -d “老赵666”

11.查看数据
启动Kafka客户端(0.8版本启动方式):
/appdata/kafka/bin/kafka-console-consumer.sh --zookeeper n1:2181,n2:2181,n3:2181 --topic track --from-beginning

微信小程序对接nginx-kafka


在一个kafka客户端中,观看日志数据采集的情况。

index.js

//index.jsPage({/*** 页面的初始数据*/data: {//该页面中的两个变量latitude: 0,longitude: 0,//控件的变量,数组类型controls: [],//显示的单车markers: []},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {//将当前对象赋给that,就是获取当前信息的拷贝。var that = this;//获取当前的位置信息wx.getLocation({//如果获取成功,会调用successsuccess: function (res) {var lat = res.latitude;var log = res.longitude;//查找附近的单车wx.request({url: "http://localhost:8888/bikes",method: 'GET',success: function (res) {const bikes = res.data.map((item) => {return {id: item.id,iconPath: "/image/bike.png",width: 35,height: 40,latitude: item.latitude,longitude: item.longitude};});// 修改data里面的markersthat.setData({markers: bikes,latitude: lat,longitude: log});}})//console.log("纬度" + lat + "经度" + log)}});//创建一个map上下文,如果想要调用地图相关的方发that.mapCtx = wx.createMapContext('map');//在地图页中加入按钮(归位、扫描、充值)//获取当前设备的信息,获取屏幕的宽高wx.getSystemInfo({success: function (res) {//屏幕高var height = res.windowHeight;//屏幕宽var width = res.windowWidth;//往页面中设置数据that.setData({controls: [{//中心点位置id: 1,iconPath: '/image/location.png',position: {width: 20,height: 35,left: width / 2 - 10,top: height / 2 - 35.},//是否可点击clickable: true},{//定位按钮安置id: 2,iconPath: '/image/img1.png',position: {width: 40,height: 40,left: 20,top: height - 60.},//是否可点击clickable: true}, {//扫码按钮id: 3,iconPath: '/image/qrcode.png',position: {width: 100,height: 40,left: width / 2 - 50,top: height - 60.},//是否可点击clickable: true}, {//充值按钮id: 4,iconPath: '/image/pay.png',position: {width: 40,height: 40,left: width - 45,top: height - 60.},//是否可点击clickable: true}, { //手动添加一辆单车的按钮id: 5,iconPath: "/image/bike.png",position: {width: 35,height: 40,},//是否可点击clickable: true}]})},})}, //在地图中绑定的事件contap(e) {//console.log(e)var that = this;if (e.controlId == 2) {//点击定位当前位置that.mapCtx.moveToLocation();}if (e.controlId == 3) {//点击扫描按钮wx.scanCode({success: function (r) {//扫描成功获取二维码的信息var code = r.result;//向后台发送请求wx.request({//method: 'POST',url: 'http://localhost:8888/bike', //仅为示例,并非真实的接口地址data: {qrCode: code,status: 0,latitude: that.data.latitude,longitude: that.data.longitude},header: {'content-type': 'application/json' // 默认值},success: function (res) {console.log(res.data)}})}})}if (e.controlId == 5) {//添加车辆的按钮that.mapCtx.getCenterLocation({success: function (res) {var lat = res.latitude;var log = res.longitude;wx.request({url: "http://localhost:8888/bike",method: 'POST',data: {latitude: lat,longitude: log},success: function () {//向后台发送请求,将单车查找出来wx.request({url: "http://localhost:8888/bikes",method: 'GET',success: function (res) {const bikes = res.data.map((item) => {return {id: item.id,iconPath: "/image/bike.png",width: 35,height: 40,latitude: item.latitude,longitude: item.longitude};});// 修改data里面的markersthat.setData({markers: bikes});}})}})}})}},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {//在这个事件中,记录用户的行为,然后发送到后台的服务器//获取当前位置wx.getLocation({success: function (res) {//纬度var lat = res.latitude;//经度var log = res.longitude;//从本地存储中取出唯一身份标识var openid = wx.getStorageSync('openid')//发送request向mongo中添加数据(添加一条文档(json))wx.request({//用POST方式请求es可以只指定index和type,不用指定idurl: "http://192.168.145.202/kafka/user",data: {time: new Date(),openid: openid,lat: lat,log: log},method: "POST"})},})},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}})

index.wxml

<!--index.wxml显示地图,其实是一般map标签40.138000,116.264110controls:地图中的控件按钮(图片)markers:后台请求的数据bindcontroltap:绑定事件bindregionchange: 视野发生变化时触发
-->
<map id="map"latitude="{{latitude}}"longitude="{{longitude}}"controls="{{controls}}" markers="{{markers}}" scale="17" show-location style="width: 100%; height:100%"bindcontroltap="contap"bindregiοnchange="regionchange"
></map>

摩拜单车项目03--Nginx相关推荐

  1. 摩拜单车项目05-Redis集群

    文章目录 业务 将kafka中的数据存入Hdfs Flume方案 优化方案 数据处理的流程 指标计算 实时指标 离线指标 保修指标 能计算哪些指标 活动参与 Redis集群 主从结构示意图 一致性ha ...

  2. 数据分析 NO.16 摩拜单车数据分析项目

    摩拜单车数据分析项目 有目标的去分析. 一般地理geohash 7 用的比较多 一般来说是长150米,宽110米 1.GeoHash将二维的经纬度转换成字符串,比如下图展示了北京9个区域的GeoHas ...

  3. TiDB 在摩拜单车的深度实践及应用

    作者介绍:吕磊,摩拜单车高级 DBA. 一.业务场景 摩拜单车 2017 年开始将 TiDB 尝试应用到实际业务当中,根据业务的不断发展,TiDB 版本快速迭代,我们将 TiDB 在摩拜单车的使用场景 ...

  4. 【技术人快报】摩拜单车多地区现Bug+iCloud完成中国本土化落地

    2018年01月19日 星期五 [技术人快报187期] 导读:摩拜单车多地区现Bug+iCloud完成中国本土化落地 每日一句 努力的意义,不只是让你过上更好的生活,还意味着,你会因此有更多的选择,遇 ...

  5. 摩拜单车,死于创新的一百万种方式

    摩拜单车,死于创新的一百万种方式(转) 文/虫二 在补贴大战的多事之秋,Uber中国前高管王晓峰用摩拜单车完成了从四轮到两轮的创业转变,这或许是厌倦了之前的流血竞争,也可能是看好那个滴滴尚未染指的市场 ...

  6. 趣店纽交所上市,市值近百亿美金;百度国际事业部将独立分拆;摩拜单车进入韩国水原市丨价值早报

    第[745]期早报由[周四]赞助播出 01 今日头条 趣店登陆纽交所,市值近百亿美金 10月19日消息,中国在线消费分期平台趣店在纽交所上市,交易代码为"QD".上市首日报收于29 ...

  7. 摩拜服务器维护,摩拜单车云服务器

    摩拜单车云服务器 内容精选 换一换 使用云服务器备份创建镜像后,通过创建成功的镜像创建云服务器,但登录云服务器后提示系统进入维护模式,无法正常使用云服务器.当云服务器带有数据盘的时候,恢复后的云服务器 ...

  8. TiDB 在摩拜单车的深度实践及应用 1

    作者介绍:吕磊,摩拜单车高级 DBA. 一.业务场景 摩拜单车 2017 年开始将 TiDB 尝试应用到实际业务当中,根据业务的不断发展,TiDB 版本快速迭代,我们将 TiDB 在摩拜单车的使用场景 ...

  9. 生活小程序摩拜单车为啥投开锁功能?生活小程序是趋势?

    这段时间,我和家里人一直都在使用摩拜单车这个目前在生活小程序中最火的小程序,几乎现在武汉大街小巷都有摩拜单车的身影!我妈也是下班天天骑单车,我也开心不少.而且我妈还告诉我让我去下载个APP叫亿里财,这 ...

最新文章

  1. 深入理解java虚拟机之类文件结构以及加载
  2. 鼠标控制,扇形的大小
  3. python好找工作吗2017-2017学什么编程语言好找工作?
  4. MOSS2007 无法上传超过30M或者50M的大文件解决办法 (转)
  5. 点击打开自己博客地址通过默认浏览器
  6. Vue.js入门教程-组件注册
  7. mysql一些常用操作_mysql的一些常用操作(一)
  8. 内存管理(C语言中malloc和free的用法)
  9. Python数值特征转换
  10. python下拉菜单_python下拉菜单
  11. vmware Esxi 回收Thin模式磁盘空间
  12. 项目经理和产品经理的职责
  13. Windows10更新安装失败,错误0x80070005
  14. 9. 广义表 - 广义表概念,存储结构,深度/长度,复制算法
  15. python 正则表达式 前瞻_【正则表达式】前瞻,后顾,负前瞻,负后顾
  16. 30 个案例教你用纯 CSS 实现常见的几何图形
  17. 《数据出境安全评估办法》将正式施行,聊聊数据出境安全合规那些事
  18. 写在2021最后一天
  19. ns的安装与使用及tcl的入门学习
  20. ElasticSearch 7.x 入门与实战

热门文章

  1. vue边缘不规则照片墙/图片墙(附开场动画)
  2. vue 定时器 setTimeout
  3. jquery tab 水平tab分页
  4. 分屏总屏计算机电缆,DJYPVP分屏+总屏蔽计算机电缆
  5. php支付接口,代付、感悟
  6. Domino开发使用JAVA,起点R3使用JAVA获取Domino数据(上篇)
  7. iFunk,定义新基准
  8. “OneNote由于某种原因,无法连接到服务器。请尝试检查您的连接以查看服务器是否可用。”的解决方案
  9. [Xmind]关于Xmind的使用方法
  10. 真机安装AKP 遇到的问题