首页 文章 精选 留言 我的

精选列表

搜索[高并发],共10000篇文章
优秀的个人博客,低调大师

码良后端代码正式开源 —— 扩展网页制作平台

源码部署 码良项目目前(2019/11/1)已经完全开源。因此这里说明下如何使用源码将整个项目运行起来。 项目构成 码良系统由3个项目构成,分别是gods-pen-server 码良服务端、gods-pen-admin 码良管理后台以及于7月份就已经开源的gods-pen码良编辑器。 从上述项目的名称上很容易看出各部分之功能,这里不再赘述。 其中码良编辑器和码良管理后台是 vue 项目,码良服务端是基于 egg 的 nodejs 项目。 开发环境运行 鉴于项目略多,我们开发了一个小工具来帮助您完成大部分工作,比如项目拉取、依赖安装、dev 运行等。 # 全局安装 gods-pen-cli 工具 npm install gods-pen-cli -g 运行gods-pen serve help可以看到有三个子命令。 gods-pen serve fetch 使用gods-pen serve fetch拉取代码并安装依赖。工具自动在当前目录(cwd)目录拉取项目源码(如果 git 可用,则使用git),然后依次安装项目依赖。 当然,你也可以不借助这个工具,从 github clone 项目即可。安装依赖也很简单,分别在三个项目根目录下yarn搞定。 项目配置 码良依赖了 es、redis、mysql、邮件、oss服务,因此需要配置这些服务的信息。 如果你有读过前一篇文档“docker 部署”部分,您应该知道我们在 docker 部署方式下默认提供了 es、redis、mysql 服务。但是在源码部署方式下,很难为您准备好这一切第三方服务,您需要选用云服务商提供的服务或者自建服务(安装 mysql、es、redis),这里不再详细叙述。对了,目前仅支持阿里云的 oss 服务(使用了对应的api)。 在获得了上述第三方服务之后,除 mysql 外,您无需对这些服务进行额外的初始化操作。当然,建立 oss bucket 这种操作就不提了。 mysql 需要提前使用gods-pen-server/sql/init.sql来初始化表结构和表数据。 mysql -h <host> -u<user> -p<password> < sql/init.sql # 请将<host> <user> <password> 换成实际值 至此,配置准备工作完成。 我们有三个项目,但是实际上,您无需逐一配置,我们已经提供了合适的默认配置,你只需要配置好第三方服务的信息即可,将信息填入gods-pen-server/config/config.dev.js gods-pen serve start 在当前目录(记得从 gods-pen-server 返回上一级)下运行gods-pen serve start,即可启动所有服务。 启动成功后访问http://127.0.0.1:8567注册用户、登陆系统 生产环境部署 生产环境的部署分两部分,前端静态资源的部署和 nodejs 服务的部署。 nodejs 服务 将 gods-pen-server 项目 clone 到服务器内,这一步您也可以通过 gods-pen 工具完成,类似上面开发环境的操作。 依赖安装好后,将第三方 es、redis、mysql、邮件、oss 服务信息配置到gods-pen-server/config/config.production.js内。 运行npm run serve启动服务,服务启动后,服务地址为http://127.0.0.1:7051/api 您应该使用 nginx 或其他服务器软件对 api 服务进行合理配置,使得外网能方便访问,比如将abc.com/api转发到 127.0.0.1:7051/api server { listen 80; server_name abc.com; # 您的实际 ip 或者域名 root /usr/share/nginx/html; # api 反向代理 location ^~ /api { proxy_pass http://127.0.0.1:7051; } } 前端项目部署 将 gods-pen-admin 和 gods-pen 项目 clone 下来,或者通过 gods-pen 工具也行。 安装依赖,然后在gods-pen-admin/src/config/production.js和gods-pen/src/config/production.js中添加配置API_PATH module.exports = { API_PATH: 'http://abc.com/api' # 配置为实际 nodejs api 服务外网可访问的路径 } 在当前目录(gods-pen-admin 的上一级)运行gods-pen serve build开始构建项目,完成后所有输出文件集中在当前目录下的 gods-pen-dist 下。 使用 nginx 或者其他服务器软件启动静态资源服务,将 gods-pen-dist 下所有文件复制到服务器软件指定目录下,您可以通过http://abc.com/admin访问到码良系统的入口页面 以下是一个 nginx 配置文件示例 server { listen 80; server_name abc.com; # 您的实际 ip 或者域名 root /usr/share/nginx/html; # 静态资源文件存放路径 # gzip gzip on; gzip_min_length 256; gzip_vary on; gzip_types *; # 所有静态资源及缓存 location ~* .*\.(jpg|gif|jpeg|css|png|js|wasm) { expires 10d; } # view路径,即渲染器,需要开启 history 模式 location ~* ^\/view\/[a-zA-Z0-9]+(\/|\?.*|)$ { index index.html; try_files $uri $uri/ /view/index.html; } # api 反向代理 location ^~ /api { proxy_pass http://godspen:7051; } } troubleshooting 拉取代码失败 由于一些众所周知的原因,github 的服务在某些时间某些网络环境下是不稳定的,如果出现了代码拉取失败的情况,请为你的命令行环境设置代理后再运行gods-pen serve fetch 安装依赖失败 这是由于缺少 c++ 编译环境造成部分 npm包编译失败,则通常发生在 window 系统上,您可以尝试全局安装 windows-build-tools windows-build-tools 是一个 npm 包,可以一键安装 c++ 编译所需的 python27、Visual Studio、C++ Build Tool 等。 Both installations are conflict-free, meaning that they do not mess with existing installations of Visual Studio, C++ Build Tools, or Python 另外上述问题在 python2 命令不可用时也会发生,如果您的机器没有安装 python 或者只安装了 python3 时,请安装 python27,或使用 pyenv 将 python 版本切换至 python2

优秀的个人博客,低调大师

纯手写实现一个可用的RPC

在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A。通常都是B把API上传到Maven私服,然后B开始写API的实现,A只需要引入API依赖进行开发即可。 订单服务调用商品服务 上图简单的描述了RPC在实际场景中的应用,我们在开发中当然是利用现有的RPC框架来快速实现业务需求,比如百度开源了baidu-rpc,阿里的Dubbo早已声名在外,腾讯自己玩TAF。本篇博客将实现一个迷你版的RPC,探索下RPC底层实现的奥秘! 动手实现RPC商品服务工程 商品服务工程 注意,我将商品服务的API以及实现分为Maven的2个模块来开发。这里,我们想给定一个商品ID,查询得到商品对象信息。 商品对象 商品API Product 要注意的是,Product是可以被序列化的,Why? 很显然,订单系统调用商品系统的时候,需要商品系统返回一个商品,必然涉及到发生网络传输,这就涉及对象的序列化和反序列化了。 商品查询API接口 商品查询API 订单系统调用商品服务 订单服务调用商品服务 在订单系统工程中需要引入商品服务API依赖。 在上图代码中,最重要的就是rpc方法了! rpc实现方法 rpc 第一,我们看到了Proxy.newProxyInstance,很显然在进行动态代理。也即是说,在订单服务调用商品服务的代码中,我们先是通过动态代理返回一个代理的IProductService类型对象,这意味着当代理对象调用queryById方法的时候,会自动调用invoke方法! 第二,我们看看invoke到底做了些什么? 它本质上就是进行Socket通信,那么它需要传递什么信息给到商品服务呢? 我们知道订单系统就是想调用商品服务的某个类的某个方法,然后把这个方法的返回结果传输给订单系统! 想一想,如何调用某个类的某个方法呢? 只要我们能确定这个类的全限定类名、确定方法名、确定方法的参数类型,给定方法需要的具体参数,通过反射就能实现。 商品服务调用后得到的结果,我们序列化写入Socket流中,在订单系统中反序列化得到对象即可。 第三,这里需要思考一个问题:在订单系统中我们只知道商品服务的API,并不知道这背后的API到底是如何实现的,所以我们需要有一个映射,就是商品服务的API到商品服务的实现的一个映射关系,其实这就是所谓的服务的注册! 商品API的具体实现 商品服务 商品服务API实现 商品服务 商品服务 从这里,可以清晰的看到,商品服务读取了订单系统调用商品系统时发送的数据,利用反射机制,进行方法调用,并把调用结果写入Socket输出流。 #运行结果 运行结果 启动商品服务后,通过订单系统发起对商品服务的调用。 以前总认为RPC是遥不可及的,感觉是个很神奇的东西,实际上它的底层实现不就是这样的么~ 晚安! 原文发布时间为:2018-09-26 本文作者:java进阶架构师 本文来自云栖社区合作伙伴“java进阶架构师”,了解相关信息可以关注“java进阶架构师”。

优秀的个人博客,低调大师

硬件成本终结者,看 NASA 如何玩转 Docker

本文首发自“Docker公司”公众号(ID:docker-cn)编译丨小东每周一、三、五 与您不见不散! Docker 容器平台正在运用到全世界的关键任务中。美国国家航空航天局(NASA)的行星防御协调办公室正在使用 Docker 平台来执行可能影响到地球上每个人的关键任务!该办公室负责跟踪近地小行星、收集相关信息并在其威胁地球安全时找到最恰当的方式使其远离地球。 DART —— 双小行星重定向测试是由约翰霍普金斯大学应用物理实验室通过美国宇航局(NASA)领导的项目。该团队选择了一颗潜在危险的小行星来测量其影响并确定此类任务的有效性。 因为宇宙空间异常复杂,所以为该任务开发软件并非易事!该团队只有一次机会来完成每次的任务,因为在太空中无法重新启动。由于太空中辐射的剧烈影响以及太空物理的限制导致了该硬件只能拥有极低的带宽和低密度的储存器。那么软件团队究竟想要使用 Docker 来解决什么问题呢?硬件精简!这个项目中所使用到的开发系统非常昂贵(约30万美元),因此不是每个开发人员都会分配到专属自己的系统,这导致了时间的局限性。该任务目前由30个开发人员组成的团队共享5个系统,这极大地降低了生产速度。 为了实现硬件模拟,让开发人员可以在自己的笔记本电脑上工作,最后在真实的硬件上进行测试,该团队开发了一款很棒的应用程序。利用容器内的 X-11 服务器和 VNC 服务器,团队能够从他们想要的任何外部容器中访问GUI,同时还能遵守他们的安全限制。 该团队部署了一个四服务栈开发环境,包括用于飞行软件,测试平台软件,用 Ruby 编写的 COSMOS 开源 GUI 地面系统和 Docker 环境的各个组件。利用容器的网络模型,飞行软件容器连接到测试平台容器。测试平台容器连接到 COSMOS 容器并充当无线电,最后 COSMOS 容器连接到 VNC 容器并通过 Openbox 提供 GUI。这样就完成了整个硬件模拟,并允许开发人员在自己的机器上工作,节省了几个月的开发时间和资源。 观看下面的主题演讲,了解更多关于 NASA 的三步计划: 建造航天器; 击中目标; 拯救世界; Docker 官方微信公众号入口:http://t.cn/RgcLE3i

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册