ocket8888 commented on a change in pull request #3972: Add Server Capabilities 
blueprint
URL: https://github.com/apache/trafficcontrol/pull/3972#discussion_r333279942
 
 

 ##########
 File path: blueprints/server-capabilitites.md
 ##########
 @@ -0,0 +1,162 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+# Server Capabilities
+
+## Problem Description
+
+Suppose a Traffic Control operator has servers of a particular type. For 
example, servers with only Memory and no Disk cache. It's possible today to 
only route to those Edges, via manual Delivery Service Server assignments. But 
suppose you have a Mid server with only Memory and no Disk. Then suppose you 
have a certain class of traffic you need to route to this Mid, but not other 
traffic. For example, Delivery Services with small images; but not DSes with 
large binary files, which would destroy the cache. Right now, this isn't 
possible in Traffic Control.
+
+We propose a feature, called "Server Capabilitites" to solve this problem. 
Servers will have "capabilitites" and Delivery Services will have "Required 
Capabilitites," and if a server does not have a required capability, then it 
should not be manually assignable as an Edge, and a Mid must not be added as a 
parent for that DS in the Edge ATS config.
+
+Initially, this is completely backwards-compatible on upgrade, because 
initially no Delivery Service will have any Required Capabilities.
+
+This feature will be completely optional. TC operators who don't need Server 
Capabilities will simply not create them.
+
+Server Capabilities will be arbitrary strings. The ATS project will not "seed" 
any, and impose as little direction as possible. For example, Server 
Capabilitites could be Cache types, Server types, Hardware types, ATS versions, 
Lua support, other ATS plugin support, or any other features an operator needs 
to route (or not route) on.
+
+
+## Proposed Change
+
+- Servers have Capabilities (i.e.: CACHE_MEMORY, CACHE_DISK )
+
+- Delivery Services have Required Capabilities (i.e.: CACHE_MEMORY, CACHE_DISK)
+
+- When generating Configuration (e.g. ATS parent.config):
+  - If a Mid Server which is otherwise parented to an Edge does not have all 
Required Capabilities of a Delivery Service, that Mid will not be inserted as a 
parent for that Delivery Service’s remap and parent rules.
+  - Backward Compatibility is automatic:
+    - Initially, no Delivery Services have Required Capabilities. Hence, 
everything behaves like it does today.
+    - If an EDGE server does not have all capabilities required by a DS, that 
server SHOULD NOT be assignable to that DS. 
+    - If an EDGE server is assigned to a DS which requires capabilities that 
server has, it SHOULD NOT be possible to remove those capabilities from that 
server.
+
+### Traffic Portal Impact
+
+- Server Page
+  - New dropdown to add to a text list: Capabilities
+  - List elements have a button to remove the capability
+  - Dropdown/List is just one option - other GUI components may be used
+  - Component should consider that there could be many Capabilities
+
+- Delivery Service Page
+  - New dropdown to add to a text list: Required Capabilities
+  - List elements have a button to remove a capability
+  - Dropdown/List is one option - other GUI components may be used
+  - Component should consider that there could be many Capabilities
+
+- New page for Server Capability Types
+  - Ability to add, delete Server Capability Types
+  - May be a text input, which adds to a list, with list element buttons to 
remove from the list
+
+
+### Traffic Ops Impact
+
+`/server_server_capabilities`
+  - List all Server capabilities
+  - GET+POST+DELETE
+  - PUT doesn't make sense. To remove one and add another, DELETE and POST.
+
+`/deliveryservices_required_capabilities`
+  - List all DS Required Capabilities
+  - GET+POST+DELETE
+  - PUT doesn't make sense. To remove one and add another, DELETE and POST.
+
+`/server_capabilities`
+  - List, create, and delete Server Capabilities.
+  - POST+GET+DELETE
+  - PUT doesn’t make sense, Capabilities are strings, if one is misspelled it 
should be removed and re-added. Simpler, less error-prone than cascading 
changes.
+
+Additionally, ATS config generation (which is currently in Traffic Ops, but in 
the process of being moved to its own library/app) will require changes. 
Primarily `parent.config`, as in the description, to prevent Mids being 
assigned as Parents for DSes for which they lack the capabilitites.
+
+#### REST API Impact
+
+See Traffic Ops Impact
+
+#### Client Impact
+
+See Traffic Ops Impact - client functions for each endpoint.
+
+#### Data Model / Database Impact
+
+New tables for Capabilitites: `server_capability`, `server_server_capability`, 
`delivery_service_required_server_capability`.
+
+### ORT Impact
+
+n/a
+
+### Traffic Monitor Impact
+
+n/a
+
+### Traffic Router Impact
+
+n/a
+
+### Traffic Stats Impact
+
+n/a
+
+### Traffic Vault Impact
+
+n/a
+
+### Documentation Impact
+
+The new UI and API endpoints will be documented. See Traffic Ops Impact.
+
+### Testing Impact
+
+The new UI, API endpoints, and ATS config changes, will have TO API tests and 
unit tests. See Traffic Ops Impact.
+
+
+### Performance Impact
+
+No performance impact expected.
+
+### Security Impact
+
+n/a
+
+### Upgrade Impact
+
+None. Upgrade will have no Required Capabilities, and config and server 
assignments will remain unchanged until an operator creates Server Capabilities.
+
+### Operations Impact
+
+None, until Server Capabilities are added. If a TC operator decides to use 
Server Capabilitites, they will they have to learn how to use them, and create 
and assign the Server Capabilitites they desire.
+
+### Developer Impact
+
+Code is added to TO endpoints, and config generation. Config generation 
complexity increases very slightly. TO endpoints are stand-alone and don't 
affect other endpoints.
+
+## Alternatives
+
+There are several other ways to do this.
+
+Within 'Server Capabilities' the API endpoints could be added to existing 
Server and Delivery Service endpoints. We are proposing they be standalone for 
now, because it's unclear how long-lived this feature will be, and how it will 
interact with 'Flexible Cachegroups' and other planned projects. Standalone 
endpoints give us more flexibility, especially around API versioning, to change 
or remove the feature in the future.
 
 Review comment:
   I'm still not sold, but I'm not going to hold anything up over it.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to