Giter Site home page Giter Site logo

vipshop / pallas Goto Github PK

View Code? Open in Web Editor NEW
246.0 25.0 92.0 252.76 MB

Curator is to Zookeeper what Pallas is to Elasticsearch

Java 88.41% Vue 9.79% Shell 0.26% Batchfile 0.01% FreeMarker 0.04% TSQL 1.49%
kibana cerebro es xpack enterprise sense elasticsearch-sql proxy management

pallas's Introduction

logo Pallas

Curator is to Zookeeper what Pallas is to Elasticsearch.

                  --Dylan.Xue

Pallas, the VIP.com's uniform search platform, built on top of the elasticsearch, aiming to solve all kinds of search-problem, such as full-text search with scoring, database sharding search, big-data search, complex aggregation search along with performance, scalability and high avaliability required, which are hard to sovled by the tradition SQL or NoSQL database. Shinning features include:

  • ES visualization management & monitoring tools based on Cerebro, bigdesk, sense. You can get them all by visiting http://localhost:8081.
  • ES search template management based on index level.
    • CURD, render and debug the templates.
    • Import and export.
    • Include syntax, highlighting, json fromat.
    • Review process required before taking effect.
    • Version comparing.
    • Template canary.
  • Deep integration between MySQL and ES.
    • Field Mapping auto generated based on MySQL schema.
    • Generate DSL via elasticsearch-sql.
    • Data-sync from DB to ES, including full-import/checking/binlog-based incremental update.(base on saturn and rdp, to be open)
  • ES http-protocol proxy.
    • Netty-based application with filter-chain pattern.
    • Service governance: index routing/timeout/retry/flow-record/slow log/index and template canary/toke-based authorization.
    • Together with Client-SDK provides you with load balance/failover abilities.
  • Pallas ES-plugin updated without a restarat.
    • Extends from AbstractSearchScript.
    • Each plugin has its own classloader.
    • Thorough class loading & unloading.
  • Pallas Console
    • ES clusters management.
    • Index management.
    • Tempalate review process.
    • ES-proxy management(metrisc/offline & online).
    • Token management.
    • Pallas plugin management.

Pallas是唯品会统一的检索平台,基于ElasticSearch深度定制,解决关系数据库和NOSQL均无法有效处理的文本检索打分,模糊查询,数据多关键字组合查询,聚合等问题场景。 功能包括:

  • ES可视化管理监控,基于Cerebrobigdesksense。通过访问http://localhost:8081 就能全拥有了。
  • ES模板管理,基于索引粒度
    • 增删改查、渲染DSL、在线调试
    • 批量导入导出
    • include语法, json 美化,高亮语法
    • 模板审核机制,灰度上线
    • 新旧版本对比
  • 深度整合MySQL和ES
    • 基于db schema自动生成Field mapping
    • 通过elasticsearch-sql自动转化SQL到ES DSL。
    • 数据同步(全量、对账、增量),基于saturnrdp,这块很快会开源。
  • ES http协议代理
    • 基于netty和filter链模式代理http请求
    • 完善的服务治理:路由、超时重试、流量录制、索引和模板灰度、基于token的鉴权
    • 配合使用client-sdk,能做到负载均衡、自动容错
  • Pallas的ES插件,线上热插拔
    • Extends from AbstractSearchScript
    • 独立的classloader设计
    • 完善的class加载和卸载
  • Pallas Console管理控制台
    • ES集群管理
    • 代理管理(监控指标、上线下线)
    • token管理
    • 模板审核流程
    • 插件管理

Main modules 主要模块

Modules Functionalities
pallas-es 基于ES 5.5.2
增加在线升级、在线重启插件
提供rpm包,一键安装
pallas-index
尚未开源
同步数据模块,包括全量、增量、对账
同步状态检测
pallas-search ES http代理层
服务治理:鉴权、路由、超时重试、流量复制、模板灰度、别名灰度等
pallas-console 索引管理:管理索引、管理模板、管理版本、流量录制、路由管理、服务治理、索引操作记录等等
集群管理:管理ES集群,集成cerebro可视化管理系统,集成bigdesk可视化监控
权限管理:基于token的授权方式
代理管理:上线/下线代理,实时查看qps/流量记录/连接数
pallas-client 基于ES rest client
自动负载均衡
超时重试
可配置直连ES还是经过proxy

Pallas architecture

arc

How it looks

looks

looks

looks

looks

Quick Start

Visit http://localhost:8081 after running the following command, make sure you have >=jdk8 installed.

cd quickstart
java -Dfile.encoding=UTF-8 -jar pallas-demo.jar  
(或者运行:sh quickstart.sh)

Click here for more details: Quick Start

Contributing

Pallas官方微信讨论群,请搜索微信号viptech128(唯技术),添加好友(备注Pallas开源交流)后加入。

所有报Bug、建议与咨询,请在Issue发起;所有代码提交,请走Pull Request流程。

对于优秀的代码提交和建议,唯品会将不吝发挥电商本色,给予vip.com购物卡的奖励 !!!

Documents

Get Started

Team members

pallas's People

Contributors

allen8203 avatar chembohuang avatar dylanxue avatar haimingwang avatar ivylee-cn avatar jaminlai avatar nathanchan avatar owenericsson avatar tannercai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pallas's Issues

重试优化顺便加上限流

  1. 分片分组
  2. 重试次数不能超过1
  3. 重试保护 10秒钟之内最多重试200次?
  4. 每次重试要使用新的IP
  5. 单次请求无论如何不能超过超时时间(connect request time + connect time + socket time < timeout)
  6. 客户端超时时间通过cookie传到ps作参考 -- 优先级低

pallas 部署8081 端口起不来

执行quickstart.sh 后3个es节点9200,9210,9220 是存活的
但是web控制台却拉不起来

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.vip.pallas.demo.LaunchAll.main(LaunchAll.java:66)
Caused by: pl.allegro.tech.embeddedelasticsearch.EmbeddedElasticsearchStartupException: Failed to start elasticsearch within time-out
at pl.allegro.tech.embeddedelasticsearch.ElasticServer.waitForElasticToStart(ElasticServer.java:124)
at pl.allegro.tech.embeddedelasticsearch.ElasticServer.start(ElasticServer.java:48)
at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.startElastic(EmbeddedElastic.java:79)
at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.start(EmbeddedElastic.java:60)
at com.vip.pallas.demo.Launcher.launchES(LaunchAll.java:174)
at com.vip.pallas.demo.Launcher.main(LaunchAll.java:93)
... 5 more
pl.allegro.tech.embeddedelasticsearch.EmbeddedElasticsearchStartupException: Failed to start elasticsearch within time-out
at pl.allegro.tech.embeddedelasticsearch.ElasticServer.waitForElasticToStart(ElasticServer.java:124)
at pl.allegro.tech.embeddedelasticsearch.ElasticServer.start(ElasticServer.java:48)
at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.startElastic(EmbeddedElastic.java:79)
at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.start(EmbeddedElastic.java:60)
at com.vip.pallas.demo.Launcher.lambda$launchES$1(LaunchAll.java:154)
at java.lang.Thread.run(Thread.java:748)
pl.allegro.tech.embeddedelasticsearch.EmbeddedElasticsearchStartupException: Failed to start elasticsearch within time-out
at pl.allegro.tech.embeddedelasticsearch.ElasticServer.waitForElasticToStart(ElasticServer.java:124)
at pl.allegro.tech.embeddedelasticsearch.ElasticServer.start(ElasticServer.java:48)
at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.startElastic(EmbeddedElastic.java:79)
at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.start(EmbeddedElastic.java:60)
at com.vip.pallas.demo.Launcher.lambda$launchES$0(LaunchAll.java:133)
at java.lang.Thread.run(Thread.java:748)

sql注入

TemplateController.java中直接接收了请求中的参数,并提取sql语句执行,导致了sql注入
图片

代码注释、规范优化

1、代码注释中既有中文、也有英文,且格式也不统一,可以对此做一些优化;
2、com.vip.pallas.search.launch.BootStrap中DefaultFilterPipeLine.getInstance()重复,可简化为DefaultFilterPipeLine instance = DefaultFilterPipeLine.getInstance();
3、DefaultFilterPipeLine.getInstance()懒加载机制可以做性能优化:
private static class InstanceHolder {
instance = new DefaultFilterPipeLine();

private static DefaultFilterPipeLine getInstance() {
return instance;
}
}
public static FilterPipeLine getInstance() {
return InstanceHolder.getInstance();
}

配置迁移

pallas.login.url 配置冲ConfigReader迁移到PallasConsoleProperties

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.