proxy

package
v0.0.0-...-03b0f71 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 2, 2023 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Copyright 2022 SphereEx Authors

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

Constants

View Source
const (
	ReadWriteSplittingRoleReadWrite = "readwrite"
	ReadWriteSplittingRoleRead      = "read"

	DatabaseEndpointRoleKey = "database-mesh.io/role"

	DefaultLoadBalanceWeight = 1
)
View Source
const (
	QoSClassKindGuaranteed = "guaranteed"
	QoSClassKindBurstable  = "burstable"
	QoSClassKindBestEffort = "besteffort"
)

Variables

This section is empty.

Functions

func GetDaemonConfig

func GetDaemonConfig(ctx *gin.Context)

func GetProxyConfig

func GetProxyConfig(ctx *gin.Context)

func Handler

func Handler() http.Handler

Types

type AdminConfig

type AdminConfig struct {
	Host     string `json:"host,omitempty"`
	Port     uint32 `json:"port,omitempty"`
	LogLevel string `json:"log_level,omitempty"`
}

type AdminConfigBuilder

type AdminConfigBuilder struct {
	// contains filtered or unexported fields
}

func NewAdminConfigBuilder

func NewAdminConfigBuilder() *AdminConfigBuilder

func (*AdminConfigBuilder) Build

func (b *AdminConfigBuilder) Build() *AdminConfig

func (*AdminConfigBuilder) SetHost

func (b *AdminConfigBuilder) SetHost(host string) *AdminConfigBuilder

func (*AdminConfigBuilder) SetLoglevel

func (b *AdminConfigBuilder) SetLoglevel(loglevel string) *AdminConfigBuilder

Need to add loglevel to env ?

func (*AdminConfigBuilder) SetPort

func (b *AdminConfigBuilder) SetPort(port uint32) *AdminConfigBuilder

type App

type App struct {
	Name     string    `json:"name"`
	Services []Service `json:"service,omitempty"`
}

type AppBuilder

type AppBuilder struct {
	VirtualDatabase   v1alpha1.VirtualDatabase
	TrafficStrategies []v1alpha1.TrafficStrategy
	DatabaseEndpoints []v1alpha1.DatabaseEndpoint
	QoSClaims         []v1alpha1.QoSClaim
}

func NewAppBuilder

func NewAppBuilder() *AppBuilder

func (*AppBuilder) Build

func (b *AppBuilder) Build() App

func (*AppBuilder) SetDatabaseEndpoints

func (b *AppBuilder) SetDatabaseEndpoints(dbeps []v1alpha1.DatabaseEndpoint) *AppBuilder

func (*AppBuilder) SetQoSClaims

func (b *AppBuilder) SetQoSClaims(qcs []v1alpha1.QoSClaim) *AppBuilder

func (*AppBuilder) SetTrafficStrategies

func (b *AppBuilder) SetTrafficStrategies(tses []v1alpha1.TrafficStrategy) *AppBuilder

func (*AppBuilder) SetVirtualDatabase

func (b *AppBuilder) SetVirtualDatabase(vdb v1alpha1.VirtualDatabase) *AppBuilder

type CircuitBreak

type CircuitBreak struct {
	Regex []string `json:"regex"`
}

CircuitBreak works with regular expressions. SQL statements that conform to regular expressions will be denied.

type ConcurrencyControl

type ConcurrencyControl struct {
	Regex          []string      `json:"regex"`
	Duration       time.Duration `json:"duration"`
	MaxConcurrency int           `json:"max_concurrency"`
}

ConcurrencyControl The conversion used for json key is defined here for kubernetes/types.go MaxConcurrency key is maxConcurrency. We need to convert it to max_concurrency to fit the pisa-proxy's configuration format FIXME: A better way to convert

type Config

type Config struct {
	Port string
}
var Conf Config

type DatabaseStrategy

type DatabaseStrategy struct {
	DatabaseShardingAlgorithmName string `json:"database_sharding_algorithm_name"`
	DatabaseShardingColumn        string `json:"database_sharding_column"`
}

type DatabaseTableStrategy

type DatabaseTableStrategy struct {
	TableStrategy
	DatabaseStrategy
}

type Endpoint

type Endpoint struct {
	IP   string `json:"ip"`
	Port uint32 `json:"port"`
}

type GlobalConfig

type GlobalConfig struct {
	EgressDevice string `json:"egress_device"`
	BridgeDevice string `json:"bridge_device"`
}

type MasterHighAvailablity

type MasterHighAvailablity struct {
	Type                      string `json:"type"`
	User                      string `json:"user"`
	Password                  string `json:"password"`
	MonitorInterval           uint64 `json:"monitor_period"`
	ConnectInterval           uint64 `json:"connect_period"`
	ConnectTimeout            uint64 `json:"connect_timeout"`
	ConnectMaxFailures        uint64 `json:"connect_failure_threshold"`
	PingInterval              uint64 `json:"ping_period"`
	PingTimeout               uint64 `json:"ping_timeout"`
	PingMaxFailures           uint64 `json:"ping_failure_threshold"`
	ReplicationLagInterval    uint64 `json:"replication_lag_period"`
	ReplicationLagTimeout     uint64 `json:"replication_lag_timeout"`
	ReplicationLagMaxFailures uint64 `json:"replication_lag_failure_threshold"`
	MaxReplicationLag         uint64 `json:"max_replication_lag"`
	ReadOnlyInterval          uint64 `json:"read_only_period"`
	ReadOnlyTimeout           uint64 `json:"read_only_timeout"`
	ReadOnlyMaxFailures       uint64 `json:"read_only_failure_threshold"`
}

type MySQLConfig

type MySQLConfig struct {
	Nodes []MySQLNode `json:"node"`
}

type MySQLConfigBuilder

type MySQLConfigBuilder struct {
	VirtualDatabaseService v1alpha1.VirtualDatabaseService
	TrafficStrategy        v1alpha1.TrafficStrategy
	DatabaseEndpoints      []v1alpha1.DatabaseEndpoint
}

func NewMySQLConfigBuilder

func NewMySQLConfigBuilder() *MySQLConfigBuilder

func (*MySQLConfigBuilder) Build

func (b *MySQLConfigBuilder) Build() *MySQLConfig

func (*MySQLConfigBuilder) SetDatabaseEndpoints

func (b *MySQLConfigBuilder) SetDatabaseEndpoints(dbeps []v1alpha1.DatabaseEndpoint) *MySQLConfigBuilder

type MySQLNode

type MySQLNode struct {
	Name     string `json:"name"`
	Db       string `json:"db"`
	User     string `json:"user"`
	Password string `json:"password"`
	Host     string `json:"host"`
	Port     uint32 `json:"port"`
	Weight   int    `json:"weight"`
	Role     string `json:"role"`
}

Node describe mysql node

func BuildMySQLNodesFromDatabaseEndpoints

func BuildMySQLNodesFromDatabaseEndpoints(dbeps []v1alpha1.DatabaseEndpoint) []MySQLNode

type NodeGroupConfig

type NodeGroupConfig struct {
	Members []NodeGroupMember `json:"member"`
}

type NodeGroupConfigBuilder

type NodeGroupConfigBuilder struct {
	DataShards        v1alpha1.DataShard
	DatabaseEndpoints []v1alpha1.DatabaseEndpoint
}

func NewNodeGroupConfigBuilder

func NewNodeGroupConfigBuilder() *NodeGroupConfigBuilder

func (*NodeGroupConfigBuilder) Build

func (*NodeGroupConfigBuilder) SetDataShards

func (*NodeGroupConfigBuilder) SetDatabaseEndpoints

func (b *NodeGroupConfigBuilder) SetDatabaseEndpoints(dbeps []v1alpha1.DatabaseEndpoint) *NodeGroupConfigBuilder

type NodeGroupMember

type NodeGroupMember struct {
	Name      string   `json:"name"`
	Reads     []string `json:"reads"`
	ReadWrite string   `json:"readwrite"`
}

type PisaDaemonConfig

type PisaDaemonConfig struct {
	// Global GlobalConfig `json:"global"`
	Apps []App `json:"app"`
}

type PisaDaemonConfigBuilder

type PisaDaemonConfigBuilder struct {
	AppBuilders []*AppBuilder
}

func NewPisaDaemonConfigBuilder

func NewPisaDaemonConfigBuilder() *PisaDaemonConfigBuilder

func (*PisaDaemonConfigBuilder) Build

func (*PisaDaemonConfigBuilder) SetAppBuilders

type PisaProxyConfig

type PisaProxyConfig struct {
	Admin     AdminConfig     `json:"admin"`
	MySQL     MySQLConfig     `json:"mysql"`
	Proxy     ProxyConfig     `json:"proxy"`
	NodeGroup NodeGroupConfig `json:"node_group,omitempty"`
}

type PisaProxyConfigBuilder

type PisaProxyConfigBuilder struct {
	AdminConfigBuilder     *AdminConfigBuilder
	MySQLConfigBuilder     *MySQLConfigBuilder
	ProxyConfigBuilder     *ProxyConfigBuilder
	NodeGroupConfigBuilder *NodeGroupConfigBuilder
}

func NewPisaProxyConfigBuilder

func NewPisaProxyConfigBuilder() *PisaProxyConfigBuilder

func (*PisaProxyConfigBuilder) Build

func (*PisaProxyConfigBuilder) SetAdminConfigBuilder

func (b *PisaProxyConfigBuilder) SetAdminConfigBuilder(builder *AdminConfigBuilder) *PisaProxyConfigBuilder

func (*PisaProxyConfigBuilder) SetMySQLConfigBuilder

func (b *PisaProxyConfigBuilder) SetMySQLConfigBuilder(builder *MySQLConfigBuilder) *PisaProxyConfigBuilder

func (*PisaProxyConfigBuilder) SetNodeGroupConfigBuilder

func (b *PisaProxyConfigBuilder) SetNodeGroupConfigBuilder(builder *NodeGroupConfigBuilder) *PisaProxyConfigBuilder

func (*PisaProxyConfigBuilder) SetProxyConfigBuilder

func (b *PisaProxyConfigBuilder) SetProxyConfigBuilder(builder *ProxyConfigBuilder) *PisaProxyConfigBuilder

type Plugin

type Plugin struct {
	CircuitBreaks       []CircuitBreak       `json:"circuit_break,omitempty"`
	ConcurrencyControls []ConcurrencyControl `json:"concurrency_control,omitempty"`
}

type Proxy

type Proxy struct {
	BackendType string `json:"backend_type"`
	DB          string `json:"db"`
	ListenAddr  string `json:"listen_addr"`
	Name        string `json:"name"`
	Password    string `json:"password"`
	// TODO: should be refactored to a new pool configuration
	PoolSize           uint32              `json:"pool_size,omitempty"`
	User               string              `json:"user"`
	SimpleLoadBalance  *SimpleLoadBalance  `json:"simple_loadbalance,omitempty"`
	ReadWriteSplitting *ReadWriteSplitting `json:"read_write_splitting,omitempty"`
	Plugin             *Plugin             `json:"plugin,omitempty"`
	ServerVersion      string              `json:"server_version,omitempty"`
	Sharding           []Sharding          `json:"sharding,omitempty"`
}

type ProxyBuilder

type ProxyBuilder struct {
	VirtualDatabaseService v1alpha1.VirtualDatabaseService
	TrafficStrategy        v1alpha1.TrafficStrategy
	DatabaseEndpoints      []v1alpha1.DatabaseEndpoint
	DataShard              v1alpha1.DataShard
}

func NewProxyBuilder

func NewProxyBuilder() *ProxyBuilder

func (*ProxyBuilder) Build

func (b *ProxyBuilder) Build() *Proxy

func (*ProxyBuilder) SetDataShards

func (b *ProxyBuilder) SetDataShards(shard v1alpha1.DataShard) *ProxyBuilder

func (*ProxyBuilder) SetDatabaseEndpoints

func (b *ProxyBuilder) SetDatabaseEndpoints(dbeps []v1alpha1.DatabaseEndpoint) *ProxyBuilder

func (*ProxyBuilder) SetTrafficStrategy

func (b *ProxyBuilder) SetTrafficStrategy(ts v1alpha1.TrafficStrategy) *ProxyBuilder

func (*ProxyBuilder) SetVirtualDatabaseService

func (b *ProxyBuilder) SetVirtualDatabaseService(svc v1alpha1.VirtualDatabaseService) *ProxyBuilder

type ProxyConfig

type ProxyConfig struct {
	Config []Proxy `json:"config"`
}

type ProxyConfigBuilder

type ProxyConfigBuilder struct {
	ProxyBuilders []*ProxyBuilder
}

func NewProxyConfigBuilder

func NewProxyConfigBuilder() *ProxyConfigBuilder

func (*ProxyConfigBuilder) Build

func (b *ProxyConfigBuilder) Build() *ProxyConfig

func (*ProxyConfigBuilder) SetProxyBuilders

func (b *ProxyConfigBuilder) SetProxyBuilders(builders []*ProxyBuilder) *ProxyConfigBuilder

type QoSClassKind

type QoSClassKind string

type QoSGroup

type QoSGroup struct {
	Rate string `json:"rate,omitempty"`
	Ceil string `json:"ceil,omitempty"`
}

type ReadWriteDiscovery

type ReadWriteDiscovery struct {
	*MasterHighAvailablity
}

type ReadWriteSplitting

type ReadWriteSplitting struct {
	Static  *ReadWriteSplittingStatic  `json:"static,omitempty"`
	Dynamic *ReadWriteSplittingDynamic `json:"dynamic,omitempty"`
}

type ReadWriteSplittingDynamic

type ReadWriteSplittingDynamic struct {
	DefaultTarget string                   `json:"default_target"`
	Rules         []ReadWriteSplittingRule `json:"rule"`
	Discovery     ReadWriteDiscovery       `json:"discovery"`
}

type ReadWriteSplittingRule

type ReadWriteSplittingRule struct {
	Name          string   `json:"name"`
	Type          string   `json:"type"`
	Regex         []string `json:"regex,omitempty"`
	Target        string   `json:"target,omitempty"`
	AlgorithmName string   `json:"algorithm_name"`
}

type ReadWriteSplittingStatic

type ReadWriteSplittingStatic struct {
	DefaultTarget string                   `json:"default_target"`
	Rules         []ReadWriteSplittingRule `json:"rule"`
}

type Service

type Service struct {
	Name      string     `json:"name"`
	QoSGroup  QoSGroup   `json:"qos_group"`
	Endpoints []Endpoint `json:"endpoints"`
}

type ServiceBuilder

type ServiceBuilder struct {
	VirtualDatabaseService v1alpha1.VirtualDatabaseService
	TrafficStrategy        v1alpha1.TrafficStrategy
	QoSClaim               v1alpha1.QoSClaim
	DatabaseEndpoints      []v1alpha1.DatabaseEndpoint
}

func NewServiceBuilder

func NewServiceBuilder() *ServiceBuilder

func (*ServiceBuilder) Build

func (b *ServiceBuilder) Build() Service

func (*ServiceBuilder) SetDatabaseEndpoints

func (b *ServiceBuilder) SetDatabaseEndpoints(dbeps []v1alpha1.DatabaseEndpoint) *ServiceBuilder

func (*ServiceBuilder) SetQoSClaim

func (b *ServiceBuilder) SetQoSClaim(qc v1alpha1.QoSClaim) *ServiceBuilder

func (*ServiceBuilder) SetTrafficStrategy

func (b *ServiceBuilder) SetTrafficStrategy(ts v1alpha1.TrafficStrategy) *ServiceBuilder

func (*ServiceBuilder) SetVirtualDatabaseService

func (b *ServiceBuilder) SetVirtualDatabaseService(vsvc v1alpha1.VirtualDatabaseService) *ServiceBuilder

type Sharding

type Sharding struct {
	TableName       string   `json:"table_name"`
	ActualDatanodes []string `json:"actual_datanodes"`
	// BindingTables [][]string `json:"binding_tables"`
	// BroadcastTables []string `json:"broadcast_tables"`
	TableStrategy         *TableStrategy         `json:"table_strategy,omitempty"`
	DatabaseStrategy      *DatabaseStrategy      `json:"database_strategy,omitempty"`
	DatabaseTableStrategy *DatabaseTableStrategy `json:"database_table_strategy,omitempty"`
}

type SimpleLoadBalance

type SimpleLoadBalance struct {
	BalancerType string   `json:"balance_type"`
	Nodes        []string `json:"nodes"`
}

type TableStrategy

type TableStrategy struct {
	TableShardingAlgorithmName string `json:"table_sharding_algorithm_name"`
	TableShardingColumn        string `json:"table_sharding_column"`
	ShardingCount              uint32 `json:"sharding_count"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL